leetcode刷题-Day2-数组
leetcode-977.有序数组的平方
题目:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
直接双指针排序
int* sortedSquares(int* nums, int numsSize, int* returnSize){
int i;
for(i=0;i<numsSize;i++){
if(nums[i]<0)
nums[i]=-nums[i];
nums[i]=nums[i]*nums[i];
}
*returnSize=numsSize;
//printf("rts=%d",*returnSize);//调试信息,确认returnSize的作用
int left,right;
left=0;
right=1;
while(right<numsSize){
if(nums[left]<=nums[right]){
left++;
right++;
}
else{
int q=nums[left];
nums[left]=nums[right];
nums[right]=q;
if(left>0){
left--;
right--;
}
}
}
return nums;
}
209.长度最小的子数组
题目:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-size-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析题目可知,使用双指针滑动窗口可以找到子数组,而确定最长子数组则需要全局变量max,判断哪个是最长子数组。
如果题目提高难度,返回子数组,还需额外添加参数记录子数组起始位置。
代码如下:
int minSubArrayLen(int target, int* nums, int numsSize){
int minlen=numsSize;
int left,right;
int key=0;
if(*nums>=target)
return 1;
if(numsSize==1){
if(*nums>=target)
return 1;
else
return 0;
}
left=0;
right=1;
int i;
int sum=0;
for(i=left;i<=right;i++){
sum+=nums[i];
//printf("//sum=%d",sum);
}
while(right<numsSize){
//判断串口内的子数组和是否大于目标值
if(sum>=target){
key =1;
minlen=(right-left+1)<minlen? (right-left+1) : minlen;
left++;
sum-=nums[left-1]; //在内部每次遍历求和数据量大起来会超时
}
else{
right++;
if(right<numsSize)
sum+=nums[right];
}
}
if(key)
return minlen;
return 0;
}
59.螺旋矩阵II
题目:
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
涉及到二维指针问题,后续再完善。