力扣算法学习day01-2
977-有序数组的平方
题目
代码实现
class Solution {
// 暴力解:全部平方然后排序。
// public int[] sortedSquares(int[] nums) {
// for(int i = 0;i < nums.length;i++){
// nums[i] = (nums[i]*nums[i]);
// }
// //排序,冒泡
// for(int i = 0;i < nums.length - 1;i++){
// for(int j = i + 1;j < nums.length;j++){
// if(nums[i] > nums[j]){
// int temp = nums[i];
// nums[i] = nums[j];
// nums[j] = temp;
// }
// }
// }
// return nums;
// }
// 双指针 时间复杂度O(n)
// 由于已经是顺序排序的整数数组了,所以,它的两边的乘积更大,只需要比较更大的然后依次加入新数组即可。
public int[] sortedSquares(int[] nums) {
int left = 0;// 左指针指向起点
int right = nums.length - 1;// 右指针指向终点
int[] temp = new int[nums.length];
int index = temp.length - 1;// 记录新数组的位置
for(;index >= 0;index--){
if(nums[left]*nums[left] >= nums[right]*nums[right]){
temp[index] = nums[left]*nums[left];
left++;
} else {
temp[index] = nums[right]*nums[right];
right--;
}
}
return temp;
}
}
209-长度最小的子数组
题目
代码实现
// 暴力解
public int minSubArrayLen(int target, int[] nums) {
int result = 1000000000;// 用于记录 长度最小的 子数组的长度
int sum = 0;// 用于记录临时的组成的子数组的值
//首先计算总值,然后将目标数大于整个数组和的情况处理掉。
int max = 0;// 记录数组总值
for(int i = 0;i <nums.length;i++){
max += nums[i];
}
if(max < target){
return 0;
}
for(int i = 0;i < nums.length;i++){
sum = nums[i];
if(sum >= target){
return 1;
}
for(int j = i + 1;j < nums.length;j++){
sum += nums[j];
if(sum >= target){
if(result > j - i + 1){// 更新resulet
result = j - i + 1;
}
}
}
}
return result;
}
//移动窗口晚上做