Day02 数组part2

本文介绍了作者在解决三个编程题目中的思路转变和解决方案,包括有序数组的平方计算、长度最小子数组问题以及螺旋矩阵II的生成,涉及到了指针、滑动窗口法和数组操作技巧。
摘要由CSDN通过智能技术生成

Day02 数组

part2

977.有序数组的平方 力扣题目地址

我的思路:
除了暴力法,限时时间内竟然都没有别的想法(虽然第一天就告诫自己要用指针!要用指针!!要用指针!!!)
看了题解后恍然大悟

解答:

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] result = new int[nums.length];
        for(int i = 0, j = nums.length-1, k = nums.length -1; k >= 0; k--) { 
            if(nums[i]*nums[i] >= nums[j]*nums[j]) {
                result[k] = nums[i]*nums[i];
                i++;
            }
            else if(nums[i]*nums[i] < nums[j]*nums[j]) {
                result[k] = nums[j]*nums[j];
                j--;
            }
        }
        return result;
    }
}

209.长度最小的子数组

我的思路:
这个一年多前 一刷时印象很深,叫滑动窗口法,因为和我本科学的通信的一个滑动窗口撞名
一个j加后面,一个i减前面

解题:

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int sum = 0, minlen = 1000000;
        int i = 0;
        for(int j = i; j < nums.length; j++) {
            sum += nums[j];
            while(sum >= target) {
                int len = j - i + 1;
                minlen = len < minlen ? len : minlen;
                sum -= nums[i];
                i++;  
            }
            continue;
        }
        if(minlen == 1000000) {
            return 0;
        }
        else {
            return minlen;
        }

    }
}

59.螺旋矩阵II

我的思路:
单纯的i、j变换
找了半天的错发现是i和j写混淆了,也怪自己没分好时间刷题,一点也不细心

解题:

class Solution {
    public int[][] generateMatrix(int n) {
        int mid = n/2;
        int i = 0, j = 0, startx = 0, starty = 0, offset = 1;
        int[][] matrix = new int[n][n];
        int loop = n / 2;
        int count = 1;
        while(loop > 0) {
            i = startx;
            j = starty;
            for(j = starty; j < n-offset; j++) {
                matrix[startx][j] = count++;
            }
            for(i = startx; i < n-offset; i++) {
                matrix[i][j] = count++;
            }
            for(; j > starty; j--) {
                matrix[i][j] = count++;
            }
            for(; i > startx; i--) {
                matrix[i][j] =count++;
            }
            startx++;
            starty++;
            offset++;
            loop--;
            
            }
            if(n % 2 != 0) {
                matrix[mid][mid] = n*n;
            }
            return matrix;
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值