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;
}
}
我的思路:
这个一年多前 一刷时印象很深,叫滑动窗口法,因为和我本科学的通信的一个滑动窗口撞名
一个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;
}
}
}
我的思路:
单纯的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;
}
}