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][]);
}
}