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;
}

总结


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

相关文章
|
开发框架 .NET 芯片
电子技术实训——多功能数字钟的设计
电子技术实训——多功能数字钟的设计
电子技术实训——多功能数字钟的设计
|
存储 Linux
linux【服务】kdump配置详解
linux【服务】kdump配置详解
|
11月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
333 1
|
存储 边缘计算 安全
未来云平台发展趋势及挑战
在数字化转型的浪潮下,云平台作为支撑大规模数据处理与应用部署的基础设施,正成为企业和个人创新发展的关键。本文将探讨未来云平台发展的趋势和面临的挑战,包括边缘计算、多云环境、安全性等方面的问题,并提出应对之策。
376 26
|
网络架构 内存技术
OpenPose原理解析
Openpose论文原理总结
819 0
|
人工智能 PyTorch iOS开发
苹果AppleMacOs最新Sonoma系统本地训练和推理GPT-SoVITS模型实践
GPT-SoVITS是少有的可以在MacOs系统下训练和推理的TTS项目,虽然在效率上没有办法和N卡设备相提并论,但终归是开发者在MacOs系统构建基于M系列芯片AI生态的第一步。
苹果AppleMacOs最新Sonoma系统本地训练和推理GPT-SoVITS模型实践
|
Java API Scala
【Flink】Flink Java 统计词频 开发
【1月更文挑战第26天】【Flink】Flink Java 统计词频 开发
《QT从基础到进阶·二十五》界面假死处理
《QT从基础到进阶·二十五》界面假死处理
422 0
《QT从基础到进阶·二十五》界面假死处理
|
XML 前端开发 小程序
css实例(一)鼠标hover下拉菜单
红框标注位置,有一个小尖尖角,这个使用样式是这样实现的。 css 复制代码
316 0
|
存储 人工智能 监控
AI推理
AI推理
600 1