题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
思路: 双指针法:创建一个新数组,从后接收,nums中较大的平方数
代码:
class Solution977_1 {
public int[] sortedSquares977_1(int[] nums) {
int left_index = 0;//左边人所在位置
int right_index = nums.length-1;//右边人所在位置
int[] result = new int[nums.length];//我会创建一个和nums一样的数组
//由于两边的人手中一定有最大的数(平方后)并且我要的是升序,所以我站在最后的位置等待
int index = nums.length-1;
//如果只有一个人,接收完这个人的平方数,回家
if(right_index == 0){
result[right_index] = nums[right_index]*nums[right_index];
return result;
}
//两个人以上,那我就从后往前走,走到家(-1),接他们中较大的平方
while(index != -1){
//先看看这两人平方后是多少
int left_num = nums[left_index]*nums[left_index];
int right_num = nums[right_index]*nums[right_index];
//左边的人更大
if(left_num >= right_num){
result[index--] = left_num;//那就要左边这人的喽,然后我往家的方向走--
left_index ++;//给完我就往中间走(左向中走++)
}else{
result[index--] = right_num;//那就要右边这人的喽,然后我往家的方向走--
right_index --;//给完我就往中间走(右向中走--)
}
}
return result;
}
}
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
思路:
代码:滑动数组
class Solution209 {
public int minSubArrayLen209(int target, int[] nums) {
int left = 0;//车尾
int sum = 0;//车上人数
int result = nums.length+1;//随便设个车厢不可能的数
//right车头
for (int right = 0; right < nums.length; right++) {
sum += nums[right];//计算当前车厢人数
while (sum >= target) {//一旦超过target
//更新最小车箱数
result = Math.min(result, right - left + 1);
//车尾-1,向前进
sum -= nums[left++];
}
}
return result == nums.length+1 ? 0 : result;
}
}