Day 2 [977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II]

977.有序数组的平方 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/squares-of-a-sorted-array/

思路:

只能想到暴力解法。。。

平方后最大的数值一定来自于数组的两边,所以进行比较之后存到一个新的数组就好了。

然后控制指针的移动!

class Solution {
    public int[] sortedSquares(int[] nums) {
        for(int i = 0; i < nums.length; i++){
            nums[i] = nums[i] * nums[i];
        }

        quickSort(nums,0,nums.length-1);
        return nums;

    }

    public void quickSort(int[] nums, int l, int r){
        if(l >= r){
            return;
        }
        int left = l, right = r;
        int pivot  = nums[left];
        while(left < right){
            while(left < right && nums[right] >= pivot){
                right--;
            }
            if(left < right) {
                nums[left] = nums [right]; 
            }
            while(left < right && nums[left] <= pivot){
                left ++;
            }
            if(left < right){
                nums[right] = nums[left];
            }
            if(left >= right){
                nums[left] = pivot;
            }
        }
        quickSort(nums,l,right-1);
        quickSort(nums,right+1,r);
    }
}

可以使用双指针来提高效率。

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] res = new int[nums.length];
        int left = 0;
        int right = nums.length-1;
        int write = nums.length-1;
        while(left <= right){
            if(nums[left] * nums[left] > nums[right] * nums[right]){
                res[write] = nums[left] * nums[left];
                left++;
                write--;
            }
            else{
                res[write] = nums[right] * nums[right];
                right--;
                write--;
            }
        }
        return res;
    }
}

209.长度最小的子数组 

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-size-subarray-sum/

思路:

使用滑动窗口

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        if(target == 0){
            return 0;
        }
        int left = 0;
        int right = 0;
        int sum = 0;
        int min = Integer.MAX_VALUE;

        while(right < nums.length){
            sum += nums[right];
            right++;
            while(sum >= target){
                min = Math.min(min,right - left);
                sum -= nums[left];
                left++;
            }
         
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }
}

59.螺旋矩阵II

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/spiral-matrix-ii/description/

思路:

无,看了k神的解析,明天再做一遍。我发现我自己对二维数组有点不熟练。。

class Solution {
    public int[][] generateMatrix(int n) {
        int l = 0, r = n - 1, t = 0, b = n - 1;
        int[][] res = new int[n][n];
        int num = 1, max = n * n;
        while(num <= max){
            for(int i = l; i <= r; i++) {
                res[t][i] = num++;
            }
            t++;
            for(int i = t; i <= b ; i++){
                res[i][r] = num++;
            }
            r--;
            for(int i = r; i >= l ; i--){
                res[b][i] = num++;
            }
            b--;
            for(int i = b; i>= t; i--){
                res[i][l] = num++;
            }
            l++;
        }
        return res;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值