@ 代码随想录算法训练营第一周(C语言)|Day2(链表)
Day2、链表(包含题目 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II )
977.有序数组的平方
题目描述
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
题目解答
int* sortedSquares(int* nums, int numsSize, int* returnSize) {
*returnSize=numsSize;
int *res=(int*)malloc(sizeof(int)*numsSize);
int left=0;
int right=numsSize-1;
while(left<=right){
if(nums[left]*nums[left]<=nums[right]*nums[right]){
res[numsSize-1]=nums[right]*nums[right];
right--;
}else{
res[numsSize-1]=nums[left]*nums[left];
left++;
}
numsSize--;
}
return res;
}
题目总结
简单。
209.长度最小的子数组
题目描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
题目解答
int minSubArrayLen(int target, int* nums, int numsSize) {
int res=numsSize+1;
int sum=0;
int left=0;
int right=0;
for(right=0;right<numsSize;right++){
sum+=nums[right];
while(sum>=target){
res=res>(right-left+1)?(right-left+1):res;
sum-=nums[left++];
}
}
return res==numsSize+1?0:res;
}
题目总结
暴力解法。
59.螺旋矩阵II
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
题目解答
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
*returnSize=n;
*returnColumnSizes=(int*)malloc(sizeof(int)*n);
int**ans=(int**)malloc(sizeof(int*)*n);
for(int i=0;i<n;i++){
ans[i]=(int*)malloc(sizeof(int)*n);
(*returnColumnSizes)[i]=n;
}
int xstart=0;
int ystart=0;
int offset=1;
int loop=n/2;
int count=1;
while(loop){
int i=ystart;
int j=xstart;
for(;i<n-offset;i++){
ans[xstart][i]=count;
count++;
}
for(;j<n-offset;j++){
ans[j][i]=count;
count++;
}
for(;i>ystart;i--){
ans[j][i]=count;
count++;
}
for(;j>xstart;j--){
ans[j][i]=count;
count++;
}
offset++;
xstart++;
ystart++;
loop--;
}
if(n%2==1){
ans[n/2][n/2]=n*n;
}
return ans;
}
题目总结
区间开闭的考虑。