977.有序数组的平方
暴力求解,复杂度nlogn
class Solution {
public int[] sortedSquares(int[] nums) {
//暴力求解
for(int i = 0;i < nums.length;i++){
nums[i] = nums[i]*nums[i];
}
Arrays.sort(nums);//时间复杂度nlogn
return nums;
}
}
自己写的丑陋的双指针
p--可以写进ans[p--]里面,先p后--
第一个for循环也可以直接写进while里面
class Solution {
public int[] sortedSquares(int[] nums) {
for(int i = 0;i < nums.length;i++){
nums[i] = nums[i]*nums[i];
}
int left = 0;
int right = nums.length - 1;
int[] ans = new int[nums.length];
int p = nums.length - 1;
while (left <= right){
if(nums[left] >= nums[right]){
ans[p] = nums[left];
left++;
p--;
}else{
ans[p] = nums[right];
right--;
p--;
}
}
return ans;
}
}
209.长度最小的子数组
双循环暴力求解
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//暴力求解
int result = -1;//保存子数组长度
//第一层循环,遍历每一个起始位置
for(int i = 0;i < nums.length;i++){
int sum = 0;
for(int j = i;j < nums.length;j++){
sum += nums[j];
if(sum >= target){
if(result == -1){
result = j - i + 1;
}else{
result = j - i + 1 >result ? result : j - i + 1;
}
break;
}
}
}
return result == -1 ? 0 : result;
}
}
滑动窗口
进入while需要取等。while里面做的事情是计算当前长度并判断是否是最短,而后移动起始节点。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int result = -1;//保存最小子数组长度
int subLen = 0;//保存子数组长度
int sum = 0;//保存当前和
int j = 0;//当前起始节点位置
//终止节点遍历
for(int i = 0;i < nums.length;i++){
sum += nums[i];
while(sum >= target){
subLen = i - j + 1;
if(result == -1){
result = subLen;
}else{
result = result < subLen ? result : subLen;
}
sum-=nums[j];
j++;
}
}
return result == -1 ? 0 : result;
}
}
59.螺旋矩阵II
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;//循环圈数,同时每循环一圈遍历也相应变短一个值。
int start = 0;//起始位置
int count = 1;//1 ~ n^2
int[][] result = new int[n][n];
int i,j;
while(loop++ < n / 2){//先判断后++,也就是第一次运行就是loop = 1
for( j = start;j < n - loop;j++){
result[start][j] = count++;
}
for( i = start;i < n - loop;i++){
result[i][n - loop] = count++;
}
for(;j >= loop;j--){
result[n - loop][j] = count++;
}
for(;i >= loop;i--){
result[i][loop - 1] = count++;
}
start++;
}
if(n%2 == 1)result[start][start] = count;
return result;
}
}