贪心算法or规律题(未完待续)

本文介绍了三个算法问题的解决方案:1217.玩筹码,通过奇偶性策略找到最小成本;面试题17.04.消失的数字,利用数学公式快速找到缺失的数字;122.买卖股票的最佳时机II,通过寻找股票价格上升区间确定最大利润。这些题目考察了规律识别、数学思维及动态规划能力。
摘要由CSDN通过智能技术生成

1217. 玩筹码

力扣传送门

题意:把筹码(就是芯片😐)移到一个位置需要付出的代价,其中,奇数移到奇数不用钱,偶数同理;奇偶之间每移动一个筹码一块钱。
思路:规律题
①奇数都能移到同一个奇数a上,无需花费
②偶数都能移到同一个偶数b上,无需花费
③最终的消耗,就是a上的筹码数量(奇数个数)和b上的筹码数量(偶数个数)的最小值,因为我们只需要将数量小的移动到数量多的即可。

class Solution {
    public int minCostToMoveChips(int[] position) {
        int aSum = 0;
        int bSum = 0;
        for(int p : position) {
            if((p & 1)== 0) {
                aSum++;
            } else {
                bSum++;
            }
        }
        return Math.min(aSum, bSum);
    }
}
面试题 17.04. 消失的数字

力扣传送门

思路:规律题
由于题目已经告诉我们数组为nums为0-n,只是里面少了一个数,那只需要求0-n的和减去nums数组的和,就可以得到那个缺失的数。

class Solution {
    public int missingNumber(int[] nums) {
        int len=nums.length;
        int sum=len;
        for(int i=0;i<len;i++){
            sum+=i;
            sum-=nums[i];
        }
        return sum;
    }
}

其它思路:哈希表/位运算
用哈希表统计,出现次数为0的则为缺失的数。
位运算的异或运算,与0异或结果为本身,与本身异或为0

122. 买卖股票的最佳时机 II

力扣传送门

思路:规律题
当股票上涨时,就是购买的时机,下降前就是出售的时机。所以我们只需要求解股票上涨的区间就可以了。例如[7,1,5,3,6,4],股票上涨区间有[1,5]和[3,6],所以答案就是这些递增区间的和,即(5-1)+(6-3)

class Solution {
    public int maxProfit(int[] prices) {
        int len = prices.length - 1;
        int res = 0;
        //求递增区间
        for(int i=0;i<len;i++) {
            while(i<len && prices[i]>=prices[i+1]) i++; //过滤递减
            int choose = i; //购买时机
            while(i<len && prices[i]<prices[i+1]) i++; //过滤递增
            if(i<=len) res += (prices[i] - prices[choose]);  //出售时机
        }
        return res;
    }
}
1221. 分割平衡字符串

力扣传送门

思路:计数
R数量等于L的数量就算一个。

class Solution {
    public int balancedStringSplit(String s) {
        int len=s.length();
        int res=0; //结果
        int count=0; //计数
        for(int i=0;i<len;i++){
            if(s.charAt(i)=='R') count++;
            else count--;
            if(count==0){
                res++;   
            }
        }
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值