Day2—— 59.螺旋矩阵 977.有序数组的平方

简介: Day2—— 59.螺旋矩阵 977.有序数组的平方

前言


每日文案:

智者的梦再美,也不如愚人实干的脚印。

一、997.有序数组的平方


题目描述:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

题目来源:

力扣

1、解题思路(双指针):

我们先观察题目,发现是一个升序的数组,我们要把它平方,再重新排序,因为数组里面是有负数的,我们平分只会大小可能就会改变,比如-100<10,but (-100)*(-100)>10*10,所以我们要想办法先平分再排序。

由于它是有顺序的,我们很显然可以看出,平方之后最大的数只可能在两端出现,因为第一位是最小的(负数最小平分就有可能是最大的),最右边是最大的正数,所以只能是他们两个竞争。

代码如下:

int* sortedSquares(int* nums, int numsSize, int* returnSize) {
    int k = numsSize-1;
    int*p = (int*)malloc(sizeof(int) * numsSize);        //申请空间
    * returnSize=numsSize;                            //返回数组长度
    for (int i = 0, j = numsSize - 1; i <= j;)
    {
        if (nums[i] * nums[i] > nums[j] * nums[j])        //两端比较大小,大的入新空间
        {
            p[k] = nums[i] * nums[i];
            i++;
            k--;
        }
        else                               
        {
            p[k] = nums[j] * nums[j];
            j--;
            k--;
        }
    }
    return p;
}

二、59.螺旋矩阵


题目描述:


给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

1.解题思路:


我们先观察矩阵,发现它是一圈一圈地走,从左往右,上往下,右往左,下往上走,数字逐渐递增,属实是回型。那么我们就要想办法设置合适的循环来解这道题了,这里我用了边界法(按我自个的理解来命名哈)。

一入循环深似海,一定要判断好边界!

代码如下:

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
    *returnColumnSizes=(int *)malloc(sizeof(int)*n);
    *returnSize=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 l=0,r=n-1,count=1;
    while(l<r)
    {
        for(int j=l;j<=r;j++)                //边界往中间夹
        {
            ans[l][j]=count++;
        }
        for(int i=l+1;i<=r;i++)
        {
            ans[i][r]=count++;
        }
        for(int j=r-1;j>=l;j--)
        {
            ans[r][j]=count++;
        }
        for(int i=r-1;i>=l+1;i--)
        {
            ans[i][l]=count++;
        }
        l++;
        r--;
    }
    if(n%2!=0)
    ans[l][r]=n*n;
    return ans;
}

总结


今天是算法训练的第二天,希望每天进步一点点,写得不好的地方,敬请指教。

相关文章
|
6月前
|
Java C++ Python
leetcode-977:有序数组的平方
leetcode-977:有序数组的平方
48 0
|
6月前
|
算法 测试技术 C#
[二分查找]LeetCode2040:两个有序数组的第 K 小乘积
[二分查找]LeetCode2040:两个有序数组的第 K 小乘积
|
算法 编译器
LeetCode4-寻找两个有序数组的中位数
LeetCode4-寻找两个有序数组的中位数
|
算法 C语言 C++
【双指针问题】977. 有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
54 0
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
每日一题——有序数组的平方
每日一题——有序数组的平方
|
人工智能 算法
有序数组的平方
有序数组的平方
|
算法 API
leetcode:4.寻找两个有序数组的中位数
题目比较好理解,如果只看最后结果的话,很容易想到把两个数组合并,并且排序后就可以轻松的找到中位数,但这样不符合题目的意思
86 0
|
算法
LeetCode每日2道--有序数组的平方
LeetCode每日2道--有序数组的平方
75 0
leetcode 977 有序数组的平方
leetcode 977 有序数组的平方
82 0
leetcode 977 有序数组的平方