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 ;
}
螺旋矩阵有点难,这道题后面那两个变量不知道怎么用。