力扣奇遇记 [第一章]

这篇具有很好参考价值的文章主要介绍了力扣奇遇记 [第一章]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


😦第一题:拿下LeetCode1769. 移动所有球到每个盒子所需的最小操作数

  • 😤 学完本章节知识即可掌握本题!

学习内容:LeetCode1769. 移动所有球到每个盒子所需的最小操作数

😤题目

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。
在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。
返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。
每个 answer[i] 都需要根据盒子的 初始状态 进行计算。


示例1

输入:boxes = “110”
输出:[1,1,3]
解释:每个盒子对应的最小操作数如下:

  1. 第 1 个盒子:将一个小球从第 2 个盒子移动到第 1 个盒子,需要 1 步操作。
  2. 第 2 个盒子:将一个小球从第 1 个盒子移动到第 2 个盒子,需要 1 步操作。
  3. 第 3 个盒子:将一个小球从第 1 个盒子移动到第 3 个盒子,需要 2 步操作。将一个小球从第 2 个盒子移动到第 3 个盒子,需要 1 步操作。共计 3 步操作。

示例2

输入:boxes = “001011”
输出:[11,8,5,4,3,4]


🙈思路分析:

根据本题目的描述,我想到一种很暴力的方法,在这一题中这道力扣题目处于中等题,但是却可以用我这种暴力法解开我觉得有点意外hhh!

时间复杂度 O(N^2)
空间复杂度 O(N)

我们先来看示例1,这里我采用的是两层for循环大法,第一层for用来遍历固定的箱子,因为在题目的示例中我们发现在每一个位置上都需要有球进去所以第一层我们确定用来定义稳定的球数,然后我们根据题目还可以知道只有位置上有1才需要把球移动过去,所以我们第二层for用来判断当前位置是否为1,这里我们还需要利用一个函数叫abs函数,它的作用是相当于绝对值的作用。

力扣奇遇记 [第一章],LeetCode刷题集,leetcode,算法,职场和发展,c++

💖此时我们就可以开始编写代码啦!但是这里我们要注意在LeetCode刷题都属于是接口型函数,所以我们呢不用去管那些函数的调用去包那些头文件,文章来源地址https://www.toymoban.com/news/detail-597098.html


💖代码产出:

int* minOperations(char * boxes, int* returnSize){
    int len = strlen(boxes);
    *returnSize = len;
    int sum = 0;
    int* answer = (int*)malloc(sizeof(int) * (*returnSize));
    for(int i = 0;boxes[i] != '\0';i++)
    {
        sum = 0;
        for(int j = 0;boxes[j] != '\0';j++)
        {
            if((boxes[j] - '0') == 1)
            {
                sum += abs(j - i);
            }
        }
        answer[i] = sum;
    }
    return answer;
}

😦第二题:拿下2089. 找出数组排序后的目标下标

  • 😤 学完本章节知识即可掌握本题!

学习内容: 拿下2089. 找出数组排序后的目标下标

😤题目

给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target
目标下标 是一个满足 nums[i] == target 的下标 i 。
nums 按 非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按 递增 顺序排列。


示例1

输入:nums = [1,2,5,2,3], target = 2
输出:[1,2]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 2 的下标是 1 和 2 。

示例2

输入:nums = [1,2,5,2,3], target = 3
输出:[3]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 3 的下标是 3 。

示例3

输入:nums = [1,2,5,2,3], target = 5
输出:[4]
解释:排序后,nums 变为 [1,2,2,3,5] 。
满足 nums[i] == 5 的下标是 4 。

示例4

输入:nums = [1,2,5,2,3], target = 4
输出:[]
解释:nums 中不含值为 4 的元素。


🙈思路分析:

根据本题目的描述,我先想到的是利用c语言里面的qsort库函数,先快速排序一下,此时的数组就是有序的了。之后在一次遍历找到下标即可

时间复杂度 O(N)
空间复杂度 O(N)

我们先来看示例1,这里先是利用排序把数组排成了升序,第一个for循环是先找到数组中与target相同的数有几个,然后在进行动态开辟数组,第二个for循环就是依次把与target相同数的下标放进ret数组中,最后在返回ret即可

在这里插入图片描述

💖此时我们就可以开始编写代码啦!但是这里我们要注意在LeetCode刷题都属于是接口型函数,所以我们呢不用去管那些函数的调用去包那些头文件,


💖代码产出:

int compare(const void* a,const void* b)
{
    return *(int*)a - *(int*)b;
}
int* targetIndices(int* nums, int numsSize, int target, int* returnSize){
    int ans = 0;
    qsort(nums,numsSize,sizeof(int),compare);
    for(int i = 0;i < numsSize;i ++)
    {
        if(nums[i] == target)
            ans ++;
    }
    *returnSize = ans;
    int* ret = (int*)malloc(sizeof(int) * *returnSize);
    int j = 0;
    for(int i = 0;i < numsSize;i ++)
    {
        if(nums[i] == target)
        {
            ret[j++] = i;
        }
    }
    return ret;
}
}

到了这里,关于力扣奇遇记 [第一章]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode力扣秋招刷题路-0609

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给你一个目录信息列表 paths ,包括目录路径,以及该目录中的所有文件及其内容,请你按路径返回文件系统中的所有重复文件。答案可按 任意顺序 返回。 一组重复的文件至少包括 两个 具有完全相同内容

    2023年04月24日
    浏览(73)
  • Leetcode力扣秋招刷题路-0902

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给定一个按 非递减顺序 排列的数字数组 digits 。你可以用任意次数 digits[i] 来写的数字。例如,如果 digits = [‘1’,‘3’,‘5’],我们可以写数字,如 ‘13’, ‘551’, 和 ‘1351315’。 返回 可以生成的小于或

    2024年02月02日
    浏览(38)
  • Leetcode力扣秋招刷题路-0447

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平面上所有回旋镖的

    2023年04月22日
    浏览(64)
  • Leetcode力扣秋招刷题路-0854

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次,能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相似度为 k 。 给你两个字母异位词 s1 和 s2 ,返回 s1 和 s2 的相似度 k 的最小值。 示例

    2024年02月02日
    浏览(41)
  • Leetcode力扣秋招刷题路-0399

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 另有一些以数组 queries 表

    2023年04月22日
    浏览(26)
  • Leetcode力扣秋招刷题路-0189

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转

    2023年04月16日
    浏览(44)
  • Leetcode力扣秋招刷题路-0721

    从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。 现在,我们想合并这些账户。如果两个账户都有一些共同

    2023年04月27日
    浏览(77)
  • leetcode 力扣刷题 旋转矩阵(循环过程边界控制)

    下面的题目的主要考察点都是,二维数组从左上角开始顺时针(或者逆时针)按圈遍历数组的过程。顺时针按圈遍历的过程如下: 对于每一圈,分为四条边 ,循环遍历就好。这时,对于 四个角 的元素的处理,可以将四条边的遍历分为以下两种情况: 第一种:每条边都从对

    2024年02月12日
    浏览(36)
  • 【leetcode 力扣刷题】汇总区间//合并区间//插入区间

    题目链接:228.汇总区间 题目内容: 看题目真是没懂这个题到底是要干啥……实际上题目要求的 恰好覆盖数组中所有数字 的 最小有序 区间范围列表,这个最小是指一个区间范围小。比如能够覆盖{2,3,4,6}的区间可以是[2,6],但是5在区间内,却不在数组内,因此这个区间不是最

    2024年02月10日
    浏览(29)
  • 力扣python刷题day03|LeetCode203、707、206

    题目 题目链接:203:移除链表元素 方法一: 知识点: 设置虚拟头结点 题目 来源:力扣(LeetCode) 提示: 0 = index, val = 1000 请不要使用内置的 LinkedList 库。 调用 get、addAtHead、addAtTail、addAtIndex 和 deleteAtIndex 的次数不超过 2000 。 方法一:单链表法 方法二:双链表法 (有点难

    2024年02月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包