算法刷题 DAY2

有序数组的平方

//双指针

//最大值只会在数组两头取得→双指针
//i=j的元素也要取→i<=j
//要求升序→k=numsize-1 从右向左赋值

int* sortedSquares(int* nums, int numsSize, int* returnSize) {
    
    *returnSize=numsSize;//注意给新数组赋值长度

    int * result=(int*)malloc(sizeof(int)*numsSize);//申请数组空间;要用指针,不然会在弹栈时销毁

    int i=0,j=numsSize-1,k=numsSize-1;

    for(;i<=j;){
        if((nums[i]*nums[i])>=(nums[j]*nums[j])){
            result[k--]=nums[i]*nums[i];
            i++;
        }

        else{
            result[k--]=nums[j]*nums[j];
            j--;
        }
    }

209 长度最小的子数组

//滑动窗口
int minSubArrayLen(int target, int* nums, int numsSize) {
    
int minL=INT_MAX;
int sum=0;
int i=0;
int j=0;

for(;j<numsSize;j++){//j为终止位置,不然和两层循环暴力解无区别
sum +=nums[j];
    
while(sum>=target){//必须用while而不能用if,因为i移动一次,sum可能依旧大于等于target
int curL=j-i+1;//当前子数组长度
minL=minL>curL?curL:minL;//更新最小子数组长度
sum -=nums[i++];
}
}
//if(j==numsSize&&sum<target) return 0;  此为错误判断条件 因为sum会在下面-- 故sum必小于target;此条件亦
  //  不可放在for循环内部,因为j==numsSize 无法进入for循环
if(minL==INT_MAX) return 0;
return minL;
}

螺旋矩阵

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
    //二维数组空间申请
    *returnSize = n;
    *returnColumnSizes = (int*)malloc(sizeof(int) * n);
    int** ans = (int**)malloc(sizeof(int*) * n);
    int i;
    for(i = 0; i < n; i++) {
        ans[i] = (int*)malloc(sizeof(int) * n);
        (*returnColumnSizes)[i] = n;
    }
    

int x=0,y=0,mid=n/2,loop=n/2,ofs=1,count=1;//x,y为每次起始坐标;mid为中心点;loop为旋转圈数;ofs为偏移量;count为赋值数据

while(loop){//共旋转n/2圈
int i=x,j=y;

for(;j<n-ofs;j++){//从左到右
    ans[x][j]=count++;
}

for(;i<n-ofs;i++){//从上到下
    ans[i][j]=count++;
}

for(;j>y;j--){//从右到左
    ans[i][j]=count++;
}

for(;i>x;i--){//从下到上
    ans[i][j]=count++;
}
//更新
x++;
y++;
ofs++;
loop--;//莫忘
}

if(n%2){//n为奇数则中心点单独赋值
    ans[mid][mid]=count;
}

return ans;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值