零、贪心算法
1.思想
https://blog.csdn.net/effective_coder/article/details/8736718
贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。
一、1217玩筹码
1.题目
https://leetcode-cn.com/problems/minimum-cost-to-move-chips-to-the-same-position/
数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。
你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):
将第 i 个筹码向左或者右移动 2 个单位,代价为 0。
将第 i 个筹码向左或者右移动 1 个单位,代价为 1。
最开始的时候,同一位置上也可能放着两个或者更多的筹码。
返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。
2.思路
贪心算法
题目的意思是,奇数移动到奇数上或者偶数移动到偶数上代价为0;
可以先把所有的奇数移动到1的位置上,偶数移动到0的位置上
比较奇数或者偶数多少,少的即为最小代价
3.代码
class Solution {
public int minCostToMoveChips(int[] position) {
//贪心算法
//题目的意思是,奇数移动到奇数上或者偶数移动到偶数上代价为0;
//可以先把所有的奇数移动到1的位置上,偶数移动到0的位置上
//比较奇数或者偶数多少,少的即为最小代价
int count1=0;
for(int i:position){
if(i%2 != 0){
count1++;//奇数的数量
}
}
int count2 = position.length-count1;//偶数的数量
return count1>count2?count2:count1;
}
}
二、55跳跃游戏
1.题目
https://leetcode-cn.com/problems/jump-game/
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
2.思路
https://leetcode-cn.com/problems/jump-game/solution/tiao-yue-you-xi-by-leetcode-solution/
依次遍历,判断当前值和当前值已经走过的值是否比数组长度大
3.代码
class Solution {
public boolean canJump(int[] nums) {
//base case
if (nums.length == 0) return false;
int rightmost =0;//最远可到达的距离
int i =0;
while (i<nums.length){
if (i<=rightmost){
rightmost = Math.max(i+nums[i], rightmost);
if(rightmost>=nums.length-1) return true;
}
i++;
}
return false;
}
}