【LeetCode Hot100】贪心篇

前言

        本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。


121. 买卖股票的最佳时机

一句话题意

        给定一个数组,问数组中后面的值减前面的值的最大差值。

一句话题解

        每个值都要去和他后面最大的值做差,贪心。

class Solution {
    public int maxProfit(int[] prices) {
        int ans=0;
        int mx=0;
        for(int i=prices.length-1;i>=0;i--){
            mx=Math.max(mx,prices[i]);
            ans=Math.max(ans,mx-prices[i]);
        }
        return ans;
    }
}

55. 跳跃游戏

一句话题意

        初始在1号点,数组上的数值为可以移动的距离,问是否能到达数组末端。

一句话题解

        贪心,类似线段覆盖,把当前可以走的最大值拿着看之后能不能走就行。

class Solution {
    public boolean canJump(int[] nums) {
        int mx=0;
        for(int i=0;imx)break;
            if(i==nums.length-1)return true;
            mx = Math.max(mx,i+nums[i]);
        }
        return false;
    }
}

45. 跳跃游戏 II

一句话题意

        跟上个题意类似,就是需要额外求最少跳跃次数。

一句话题解

        将每次能到达的最远位置保存和下一次能到达的最大距离保存,当到达这次的最远距离了,就让ans++,更新最远距离。

class Solution {
    public int jump(int[] nums) {
        int ans=0;
        int end=0;
        int mx=0;
        for(int i=0;i

763. 划分字母区间

一句话题意

        给定一个字符串,问最多可以分割成多少个字符串,保证每个字符只出现在一个字符串内。

一句话题解

        先求一下每个字符最后出现的位置,然后类似上个题目的解决方法,就是拿每个的最后的位置,到达最后的哪个位置了意味着就要分割了,然后再继续向下求即可。

class Solution {
    public List partitionLabels(String s) {
        int[] c=new int[26];
        for(int i=0;i ans = new ArrayList<>();
        int mn=0;
        int mx=0;
        for(int i=0;i

你可能感兴趣的:(算法,leetcode)