LeetCode Java day3
我感觉这个力扣新手村很奇妙。。。难度有点小跳跃哈
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
嘛,开始感觉还没啥,好像合并规则很简单mia,结果规则确实很好,但是怎么合并是个问题。。。阿巴阿巴~~~
真的想给自己俩耳刮子,都用Java了还一直惦记着数组,合并的时候,一开始居然想着临时容器使用二维数组存储,最后return 这个容器,结果捏,傻乎乎定义了一个
int[][]arr=new int[10000][2];//emmm,太睿智了,后面打印一堆0
最后终于想起来亲爱的集合了,泪目了。抽个时间把集合和一些api预习一下。
class Solution {
static public int[][] merge(int[][] intervals) {
if(intervals.length<2){
return intervals;
}
//先进行排序
Arrays.sort(intervals,
(int []x,int []y)->{return x[0]-y[0];});
//临时容器
ArrayList<int[]>temp=new ArrayList<>();
int end=intervals[0][1];
int start=intervals[0][0];
int i=1;
while(i<intervals.length){
int[] curr=intervals[i];
if(end<curr[0]){
temp.add(new int[]{start,end});
//注意移动
start=curr[0];
end=curr[1];
}
else{
end=Math.max(end,curr[1]);
}
i++;
}
temp.add(new int[]{start,end});
int [][]ch=new int[temp.size()][2];
for (int j = 0; j <ch.length ; j++) {
for (int k = 0; k <2 ; k++) {
ch[j][k]=temp.get(j)[k];
}
}
return ch;
}
}
嘛,也是用到了前几天学的jdk8的lambda去进行重写。不过迭代器那玩意我有点模糊了,所以不知道是不是在这里也能用,直接两个for循环解决,无脑过了再说,hhh。
感觉二维数组用的太少了,做这个题给我干废了都(/ _ \)
咱就是说,虽然知道两个for循环赋值很蠢,但是咱真的不知道了,看了大佬们的题解,也只能说,说得是内。
List<int[]>temp=new ArrayList<>();
// int [][]ch=new int[temp.size()][2];
// for (int j = 0; j <ch.length ; j++) {
// for (int k = 0; k <2 ; k++) {
// ch[j][k]=temp.get(j)[k];
// }
// }
// return ch;
return temp.toArray(new int[temp.size()][2]);
List这里我基本就是没啥基础,感觉真的好好用,后面的日子有得过了!!
这个题。。。嘛今天长跑搞的时间有点紧张,心中铭记英雄哥的话,它让你不用的,我偏要用!
给定一个 n × n 的二维矩阵 matrix
表示一个图像。请你将图像顺时针旋转 90 度。
你必须在** 原地** 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
class Solution {
static public void rotate(int[][] matrix) {
int row= matrix.length;
int col=row;
int[][]curr=new int[row][col];
for(int i = 0;i < matrix.length;i++) {
for (int j = 0; j < matrix[i].length; j++) {
curr[i][j] = matrix[i][j];
}
}
for (int i = 0; i <row ; i++) {
for (int j = 0; j <col; j++) {
matrix[j][row-i-1]= curr[i][j];
}
}
}
}
嘛,没有下次了,时间不够挤啊,第二个题待我床上慢慢思考总结怎么原地转圈圈。