代码随想录一刷 DAY2 数组 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

1.学习一点小东西:高效拼接字符串,你会用“+”还是StringBuilder.append? - 知乎

语法糖:语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。

Java中的“+”对字符串的拼接,其实现原理是使用StringBuilder.append()方法。

977. 有序数组的平方 - 力扣(LeetCode)

使用快慢指针法,没想到自己写出来了嘿嘿

class Solution {
    public int[] sortedSquares(int[] nums) {
        if(nums==null||nums.length==0)
        {
            return nums;
        }
        int l=0,r=nums.length-1;
        int k=nums.length-1;
        int[] result=new int[nums.length];
        while(l<=r)
        {
            int ll=nums[l]*nums[l];
            int rr=nums[r]*nums[r];
            int x;
            if(ll>rr)
            {
                result[k]=ll;
                l++;
                k--;

            }else{
                result[k]=rr;
                r--;
                k--;
            }
        }
        return result;
    }
}

时空复杂度均为O(n)

209. 长度最小的子数组 - 力扣(LeetCode)

滑动窗口:最重要的就是如何移动滑动窗口起始点的值

54. 螺旋矩阵 - 力扣(LeetCode)

自己之前写的

关键在于,确定每一步循环里的区间是左闭右开,怎样划分循环。

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] a=new int[n][n];
        int loop=n/2;
        int count=1;
        for(int i=0;i<loop;i++)
        {
            //行不动 列动
            for(int j=i;j<n-i-1;j++)
            {
                a[i][j]=count;
                count++;
            }
            //列不动行动
            for(int j=i;j<n-i-1;j++)
            {
                a[j][n-i-1]=count++;
            }
            //列动
            for(int j=n-i-1;j>i;j--)
            {
                a[n-i-1][j]=count++;
            }
            for(int j=n-i-1;j>i;j--)
            {
                a[j][i]=count++;
            }

        }
        if(n%2!=0){
            a[(n-1)/2][(n-1)/2]=count;
        }
         return a;
    }
   
}

卡哥的做法比我的简洁,易于理解很多

下图截取自《代码随想录》

 真正解决题目的代码都是简洁的,或者有原则性的 这句话真的特别正确,这种题最重要的就是怎么样找出来重复操作的规律性并做好边界值判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值