代码随想录第二天 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

文章介绍了如何使用双指针技巧解决有序数组的平方问题,以及找到数组中最小子数组的长度。此外,还探讨了构建螺旋矩阵的算法,特别提到了处理奇数大小矩阵时的特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

977 有序数组的平方

思路:第一反应想到的就是创建一个新的数组,然后把原来的数组平方,放到新数组,然后在对新数组排序。但是这样解题并没有用到双指针,想了很久,也没有想到这道题怎么用双指针来做。看了卡哥的视频有一种豁然开朗的感觉,原来双指针解这题是这么回事。

int* sortedSquares(int* nums, int numsSize, int* returnSize){

int*array = (int *)malloc(sizeof(int)*numsSize);

int k = numsSize -1 ;

int left =0 ;

int right = numsSize-1 ;

while(left<=right){

if(nums[left]*nums[left] > nums[right]*nums[right]){

array[k] = nums[left]*nums[left] ;

k--;

left++ ;

}else{

array[k] = nums[right]*nums[right];

k--;

right--;

}

}

*returnSize = numsSize;

return array;

}

209 长度最小的子数组

int minSubArrayLen(int target, int* nums, int numsSize){

int * array = (int *)malloc(sizeof(int)*numsSize);

int result = numsSize ;

int i = 0 ;

int sum = 0 ;

for(int j = 0 ; j < numsSize ; ++j){

sum +=nums[j] ;

while(sum>=target){

int subsize = j-i+1;

if(result>subsize){

result = subsize;

}

sum -= nums[i];

i++;

}

}

return result;

}

59螺旋矩阵

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){

int array[n][n] ;

int starti = 0 ;

int statrj = 0 ;

int offset = 1 ;

int count = 1 ;

int i = 0 ;

int j = 0 ;

if(n%2 != 0){

array[n/2][n/2] = n*n ;

}

for(int t = 0 ; t < n/2;t++){

for(j = statrj ; j < n-offset ; j++){

array[i][j] = count ;

count ++ ;

}

for(i = starti ; i < n- offset ; i++){

array[i][j] = count ;

count++ ;

}

while(j > statrj ){

array[i][j] = count ;

count++ ;

j-- ;

}

while(i > starti){

array[i][j] = count ;

count++ ;

i-- ;

}

}

return array ;

}

螺旋矩阵有点难,这道题后面那两个变量不知道怎么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值