有序数组的排序
题目:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
思路:还是关于双指针的思路,但是要注意负数平方根后的结果是否变成最大值,那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
class Solution {
public int[] sortedSquares(int[] nums) {
int left=0;
int right=nums.length-1;
int k=nums.length-1;
int[]arr= new int[nums.length];
while(left<=right){
if(nums[left]*nums[left]>nums[right]*nums[right]){
arr[k]=nums[left]*nums[left];
k--;
++left;
}else{
arr[k]=nums[right]*nums[right];
k--;
--right;
}
}
return arr;
}
}
长度最小的子数组
题目:给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili
思路:本题有暴力解法,两个for循环但是力扣不一定能通过,时间复杂度太高O(n**2),另一个思路就是滑动窗口思路,所谓滑动窗口就是不断调整起始位置和终止位置,寻找最优,利用一个for循环,理解代码随想录文章的解析
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int right =0;
int left =0;
int num=0;
int reslut= Integer.MAX_VALUE;
for(right=0;right<nums.length;right++){
num+=nums[right];
while(num>=target){
reslut=Math.min(reslut,right-left+1);
num-=nums[left++];
}
}
return reslut== Integer.MAX_VALUE?0:reslut;
}
}
螺旋矩阵II
题目:给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
思路: