53. 最大子数组和 - 力扣(LeetCode)
class Solution {
public int maxSubArray(int[] nums) {
//这个题就是直接通过for进行判断,每次相加找出最大值
int n=nums.length;
int count=0;
int result=Integer.MIN_VALUE;
for(int i=0;i<n;i++){
count+=nums[i];
result=Math.max(result,count);
//相加的时候小于0就进行重置
if(count<0){
count=0;
}
}
return result;
}
}
56. 合并区间 - 力扣(LeetCode)
思路:
先按首位置进行排序;
接下来,如何判断两个区间是否重叠呢?比如 a = [1,4],b = [2,3]
当 a[1] >= b[0] 说明两个区间有重叠.
但是如何把这个区间找出来呢?
左边位置一定是确定,就是 a[0],而右边位置是 max(a[1], b[1])
所以,我们就能找出整个区间为:[1,4]
class Solution {
public int[][] merge(int[][] intervals) {
List<int []> list=new ArrayList<>();
//为空判断
if(intervals ==null || intervals.length==0 ){
return new int[0][];
}
if(intervals.length==1){
return intervals;
}
//进行排序
Arrays.sort(intervals,(a,b)-> a[0]-b[0]);
int left,right;
int i=0;
//循环取数
while(i<intervals.length){
left=intervals[i][0];
right=intervals[i][1];
//判断两个区间是否重叠,如有就进行
while(i<intervals.length-1 && right>=intervals[i+1][0]){
right=Math.max(right,intervals[i+1][1]);
i++;
}
list.add(new int[]{left,right});
i++;
}
return list.toArray(new int[0][]);
}
}