代码随想录算法训练营 ---第三十一天

本文分享了三道涉及贪心思想的编程题目,涉及局部最优和全局最优策略,以及作者对解决过程中的不同思路和代码实现。作者强调贪心问题的不确定性及其趣味性。
摘要由CSDN通过智能技术生成

今天是三道贪心思想的题目,不算困难。

第一题:

简介:

局部最优:收集每天的正利润。

全局最优:求得最大利润

代码实现:

第二题:

简介:

本题题解思路和我的思路不太一样。我都说一下

我的思路:

我认为我们不需要考虑怎么跳步,我们只需要保证能跳到终点就行。所以,我一步一步的跳如果碰到数组值为0时,我想的是,将下标回退,如果回退的下标所指的值能跳过0这个值那么就可以继续跳过0往后走,直到终点。但是有几点特殊情况要注意,如果我们回退后的下标位置所指的值可以直接跳向终点,那么我们就直接返回true。否则,就继续循环。

题解思路:

题解思路为看覆盖范围,意思是同样不管如何跳步,只要我能跳的范围能到达终点就返回true,否则返回false;

代码实现:

我的代码实现 :

题解代码实现: 

 第三题:

简介:

我的思路:

本题我的想法是我们要记录的是跳步的最小次数,那么我就从后往前跳每次条最大限度,达到起点就是最小跳步次数。我们看一个例子

首先,我们开始遍历,遍历到3的时候,因为我们从三可以直接跳到四,所以我们将3到4作为最后一步。然后将遍历的终点变为3的位置。我们从头开始遍历,我们发现从2可以直接跳到3,此时我们就不用遍历了,因为已到达起点,我们将2跳到3作为倒数第二步,然后结束所以最小步数为2.

注:

代码实现中我将i=-1是因为后面i要++所以如果等于0,那后面起点就要变为1了.

题解思路:

  

代码实现:

我的代码实现:
 int jump(vector<int>& nums) {
         if(nums.size()==1)return 0;
         int i;
         int pos =nums.size()-1;
         int result =0;
             for(i=0;i<nums.size();i++){
                 if(i+nums[i]>=pos){
                     if(i==0){
                         result++;
                         return result;
                     }
                     pos = i;
                     i =-1;
                     result++;
                 }
             }
             return result;
    }
题解代码实现:

总结: 

我认为贪心思想的题目,还是很有意思的,因为它有很多的不确定性,不像别的题目有固定模板。虽然可能会发生简单的简单,难的更难的情况。但还是很有趣的。继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值