力扣奇遇记 [第一章]

2024-02-27 1018阅读

温馨提示:这篇文章已超过461天没有更新,请注意相关的内容是否还可用!

文章目录

  • 😦第一题:拿下LeetCode1769. 移动所有球到每个盒子所需的最小操作数
    • 学习内容:LeetCode1769. 移动所有球到每个盒子所需的最小操作数
    • 🙈思路分析:
    • 💖代码产出:
    • 😦第二题:拿下2089. 找出数组排序后的目标下标
      • 学习内容: 拿下2089. 找出数组排序后的目标下标
      • 🙈思路分析:
      • 💖代码产出:

        😦第一题:拿下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刷题都属于是接口型函数,所以我们呢不用去管那些函数的调用去包那些头文件,


          💖代码产出:

          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 
                            
                            
                            
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]