C语言leetcode集训一:数组

为了进一步巩固C语言基础,同时进一步了解leetcode刷题的流程,开始进行C语言的集训,今天是第一天,看看我都做了哪些题,因为周末,有点颓废,所以基本上都是简单题,现在只想睡觉......

有关数组的知识想必应该不用多说,主要是了解数组的存储结构,长度索引和函数传参,下面看看都有哪些题型

1.搜索旋转排序数组

 int search(vector<int>& nums, int target) {
     for(int i=0;i<nums.size();i++)
   {
       if(nums[i]==target)
       {
           return i;
           break;
       }
       
   }
   return -1;

这里给出的代码都是核心代码模式,都是具有该功能的函数实现,但其实在以后的公司面试中,ACM模式是很重要的,ACM模式就是让你直接赋值,自己输入输出实现功能,相比核心代码模式要难一点。

这道题我不明白为什么是中等难度,不就是在数组中寻找目标值的下标索引吗,没什么难度啊。

2.搜索旋转排序数组中的最小值

 int findMin(vector<int>& nums) {
        int min=1000;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]<min)
            {
                min=nums[i];
            }
        }
        return min;
    }

这道题就是寻找最小值,更没有难度了,先定义一个最小值,一般需要比较大,然后遍历数组,如果找到比这个最小值min还小的值,更新最小值min,最后返回最小值min

3.斐波那契数

int fn[1000];
    int fib(int n) {
     fn[0]=0,fn[1]=1;
     for(int i=2;i<=n;i++)
     {
         fn[i]=fn[i-1]+fn[i-2];
     }
      return fn[n];
    }

这道题也算是数组的经典题目了,求斐波那契数列的第n项,解题思路是:先定义一个全局的辅助函数,然后定义斐波那契数列的前两项,循环通项公式即可。

4.爬楼梯

 int f[1000];
    int climbStairs(int n) {
        f[0]=f[1]=1;
        for(int i=2;i<=n;i++)
        {
            f[i]=f[i-1]+f[i-2];
        }
    return f[n];
    }

看到这你可能就会有疑问,这不是跟上一题的代码一样吗,你耍我呢,我知道你急,但你先别急,这道题其实就是在求斐波那契的第n项,怎么分析出来呢?听我细细道来

在没有思路时,我们可以看示例来列举,在距离楼顶只有0阶时,有1种办法;在距离楼顶只有1阶时,有1种方法;在距离楼顶有2阶时,有2种方法,因为我们可以从距离楼顶只有1阶上来,这样和距离楼顶只有1阶时一样,也可以从距楼顶有2阶上来,这样一次走2阶,加起来就是2种方法;在距离楼顶有3阶时,可以先上1阶,从距离楼顶只有2阶上来,这样就和前面一样的方法了,是2种,也可以上2阶,然后就和距离楼顶只有1阶一样了;同理在距离楼顶4阶时,可以先上1阶,后面和距离3阶一样,或者先上2阶,后面和距离2阶一样,这样就很容易想到是斐波那契额问题啦!

5.猜数字

int game(vector<int>& guess, vector<int>& answer) {
          int cnt=0;
          for(int i=0;i<3;i++)
          {
              cnt+=(answer[i]==guess[i])?1:0;
          }
          return cnt;
    }

这道题也是简单题,就是遍历两个数组,看相同索引下两个数组的值是否相同,相同计数器就加1,不相同加0。

6.拿硬币

int minCount(vector<int>& coins) {
         int cnt=0;
         for(int i=0;i<coins.size();i++)
         {
             cnt+=(coins[i]+1)/2;
         }
         return cnt;
    }

这道题其实就是看硬币数是奇数还是偶数的问题,如果coins[i]为奇数的话,求最少的次数肯定是先拿2枚,最后肯定要拿1枚,次数就是(coins[i]+1)/2;如果为偶数的话,次数本来应该写成coins[i]/2的,但C语言有向下取整的规则,所以我们可以统一写成(coins[i]+1)/2了。

今天属实有点不想学,水了一篇博客,大家见谅。

相关推荐
sjsjs1125 分钟前
【数据结构-合法括号字符串】【hard】【拼多多面试题】力扣32. 最长有效括号
数据结构·leetcode
咕咕吖2 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
~yY…s<#>4 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
linsa_pursuer5 小时前
快乐数算法
算法·leetcode·职场和发展
XuanRanDev5 小时前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
代码猪猪傻瓜coding5 小时前
力扣1 两数之和
数据结构·算法·leetcode
南宫生6 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
passer__jw7678 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
星沁城9 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵