leetcode 贪心(greedy)—— 1217/55

零、贪心算法

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;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值