今天是三道贪心思想的题目,不算困难。
第一题:
简介:
局部最优:收集每天的正利润。
全局最优:求得最大利润。
代码实现:
第二题:
简介:
本题题解思路和我的思路不太一样。我都说一下
我的思路:
我认为我们不需要考虑怎么跳步,我们只需要保证能跳到终点就行。所以,我一步一步的跳如果碰到数组值为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;
}
题解代码实现:
总结:
我认为贪心思想的题目,还是很有意思的,因为它有很多的不确定性,不像别的题目有固定模板。虽然可能会发生简单的简单,难的更难的情况。但还是很有趣的。继续加油!