LeetCode55+56

LeetCode 55. ジャンピングゲーム

一連の考え

greedy を使用するのは比較的簡単で、最も遠い距離を設定します。距離は添字 0 から計算されます。添え字をトラバースするには i を使用します。i の範囲は 0 から最も遠い距離までです。最も遠い距離は、トラバースするたびに計算されます。最も遠い距離 >= 配列の長さの場合、true を返し、それ以外の場合は false を返します。 .

コード

class Solution {
    public boolean canJump(int[] nums) {
        if(nums.length == 1){
            return true;
        }
        //LongestDistance从0开始
        int LongestDistance = nums[0]+0;
        for(int i =0;i<=LongestDistance;i++){
            if(LongestDistance >= nums.length-1){
                return true;
            }
            LongestDistance = Math.max(LongestDistance,nums[i]+i);
        }
        return false;
    }
}

LeetCode 56. マージ間隔

一連の考え

2 つのポインター l と r を使用して、配列をトラバースします。r が次の配列の最初の値と比較されるたびに、r がより小さい場合、l と r に対応する配列が res に追加され、l と r が更新されます。

逆に、r を更新するには、r は r とその 2 番目に大きい値に等しい. トラバーサルの後、最後に更新された l と r は res に追加されていない. l と r を追加するだけ.

コード

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals == null || intervals.length == 1){
            return intervals;
        }
        List<int[]> res = new ArrayList<>();
        Arrays.sort(intervals,(x, y)-> x[0] - y[0]);
        int l = intervals[0][0];
        int r = intervals[0][1];
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>r){
                res.add(new int[]{l,r});
                l = intervals[i][0];
                r = intervals[i][1];
            }else{
                r = Math.max(intervals[i][1],r);
            }
        }
        res.add(new int[]{l,r});
        return res.toArray(new int[0][]);
    
    }
}

おすすめ

転載: blog.csdn.net/weixin_56640241/article/details/125266122