LeetCode Java day3

LeetCode Java day3


我感觉这个力扣新手村很奇妙。。。难度有点小跳跃哈

LCR 074. 合并区间

以数组 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这里我基本就是没啥基础,感觉真的好好用,后面的日子有得过了!!



这个题。。。嘛今天长跑搞的时间有点紧张,心中铭记英雄哥的话,它让你不用的,我偏要用!

48. 旋转图像

给定一个 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];
                }
            }
        }
    }

嘛,没有下次了,时间不够挤啊,第二个题待我床上慢慢思考总结怎么原地转圈圈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值