LeetCode55. 跳跃游戏
思路
使用贪心比较简单,设置一个最远距离,该距离从下标为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;}
}
LeetCode56. 合并区间
思路
用两个指针l和r来遍历数组。每次将r和下一个数组的第一个值比较,如果r小于的话就将l和r对应的数组添加到res中,并且更新l和r。
反之,更新r,r等于r和其第二值最大的,遍历结束后,还有最后一次更新的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][]);}
}