代码随想录算法训练营第二天| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵||

news2024/10/6 2:29:34

LeetCode977.有序数组的平方

链接:有序数组的平方

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

 看到这道题,我第一反应就是把每个数的平方算出来然后排序,思路很简单,可以写出如下代码:

public int[] sortedSquares(int[] nums) {
        // 1<=nums.length<=10000
        for(int i=0;i<nums.length;i++){
            nums[i]=nums[i]*nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }

排序的时间复杂度为:O(nlogn)

所以以上代码的时间复杂度是:O(n+nlogn)

空间复杂度:O(1)

虽然能通过这道题,但是有点慢,我看到数组是有序的那么平方后的数字的最大的只有可能在两端出现,所以我们可以用双指针来解这道题,可以写出如下代码:

public int[] sortedSquares(int[] nums) {
        int left=0;
        int right=nums.length-1;
        int[] result=new int[nums.length];
        for(int i=result.length-1;i>=0 && left<=right;i--){
            if(nums[left]*nums[left]>nums[right]*nums[right]){
                result[i]=nums[left]*nums[left];
                left++;
            }else{
                result[i]=nums[right]*nums[right];
                right--;
            }
            
        }
        return result;
    }

 时间复杂度:O(n)

 空间复杂度:O(n)

测试用例:

 1.nums全是正数

 2.nums全是负数

 3.nums有正有负

 4.nums中有重复数字

 3.nums为空

LeetCode209.长度最小的子数组 

链接:长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

  

涉及到连续,我们可以考虑用滑动窗口来解这道题

什么是滑动窗口?

滑动窗口就是不断调节起始下标和结束下标,来得到最后的答案,看起来就像一个窗口在滑动一样。

代码如下:

public int minSubArrayLen(int target, int[] nums) {
        // 1 <= nums.length <= 105
        int sum=0;
        int len=0;
        int j=0;
        int result=Integer.MAX_VALUE;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
            len++;
            while(sum>=target){
                if(len<result){
                    result=len;
                }
                sum-=nums[j++];
                len--;
            }
        }
        return result==Integer.MAX_VALUE?0:result;
    }

其中i代表结束位置,j代表起始位置,如果sum>=target了,保存长度,并向前移动起始位置,缩短长度,直到sum<target。

滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。

时间复杂度:O(n) //虽然for循环里面还有一个while循环,但是只遍历一遍数组所以是O(n)

空间复杂度:O(1)

LeetCode59.螺旋矩阵|| 

链接:螺旋矩阵||

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

 

 看起来本题很容易,但是就是写不出来,我就是这样,总是有没考虑到的地方,而且代码写的很复杂(一堆判断),最后还是看了题解,本题只需要模拟数字的遍历方向就行,最后写出如下代码: 

public int[][] generateMatrix(int n) {
        //1 <= n <= 20
        int loop=0;  //循环次数
        int count=1;  //数字
        int[][] result=new int[n][n];
        int start=0;  //开始点
        int i,j;
        while(loop++<n/2){
            // 左->右
            for(j=start;j<n-loop;j++){
                result[start][j]=count++;
            }
            // 上->下
            for(i=start;i<n-loop;i++){
                result[i][j]=count++;
            }
            // 右->左
            for(;j>=loop;j--){
                result[i][j]=count++;
            }
            // 下->上
            for(;i>=loop;i--){
                result[i][j]=count++;
            }
            start++;
        }
        if(n%2==1){
            result[n/2][n/2]=count;
        }
        return result;
    }

最精妙的还是这个loop的定义,最多循环n/2次,每循环一次,每行(列)的数字就少一个,所以有j<n-loop,此外还要注意一点,就是如果n是奇数的时候,最中间的数字需要手动填上去,而n是偶数的时候循环n/2次刚刚填满。

时间复杂度:O(n^2)  //二维矩阵

空间复杂度:O(1) 

 测试用例:

1.输入n=1

2.输入n=20

3.输入n为奇数

4.输入n为偶数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结构体大小的计算

结构体计算要遵循字节对齐原则。 结构体默认的字节对齐一般满足三个准则&#xff1a; 结构体变量的首地址能够被其最宽基本类型成员的大小所整除&#xff1b;结构体每个成员相对于结构体首地址的偏移量&#xff08;offset&#xff09;都是成员大小的整数倍&#xff0c;如有需…

【并发篇】04 线程池核心参数

这道题其实就是在问java中线程池的实现类ThreadPoolExecutor&#xff0c;这个类参数最多的构造方法有7个参数。 线程池本质上就是管理一组线程&#xff0c;用来执行提交给线程池的任务。提交任务用的是submit(task)。 corePoolSize设置核心线程数。核心线程执行完任务后仍然需…

java培训机构学校教学教务选课管理平台springboot+vue

近年来&#xff0c;随着培训机构机构规模的逐渐增大&#xff0c;人工书写的方式已经不能满足如此庞大的数据。为了更好的适应信息时代的高效性&#xff0c;一个利用计算机来实现培训机构教务管理工作的系统将必然诞生。基于这一点&#xff0c;设计了一个培训机构教务管理系统&a…

视觉相机模型以及投影原理推导——(单目)

相机模型简介 参考文献&#xff1a;视觉SLAM十四讲、视觉惯性SLAM理论与源码分析、该博客、文中的公式直接引用上面的文章&#xff0c;如有侵权请联系本人删除 1、针孔相机模型 投影过程 三维世界中的物体&#xff08;目标点&#xff09;P反射光线&#xff0c;通过相机光心&am…

RL - 强化学习 蒙特卡洛 (Monte-Carlo) 方法计算状态价值

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131102145 在强化学习中&#xff0c;状态价值 (State Value) 是指在特定状态下&#xff0c;智能体能够从该状态开始执行一系列动作&…

你还在用U盘和聊天工具来处理文档吗?ONLYOFFICE的协作空间来解决你的痛点了!

你还在用U盘和聊天工具来处理文档吗&#xff1f;ONLYOFFICE的协作空间来解决你的痛点了&#xff01; 说起Office办公软件&#xff0c;大家想到的首先就是Word、PPT、Excel&#xff0c;这是微软Office的三件套&#xff0c;从我们当代人念大学写论文时候开始学着用&#xff0c;到…

PDF或图片文档内容识别、关系抽取

需求 自动识别法院和公积金中心的文书&#xff08;调解书、判决书、裁定书、通知书&#xff09;扫描件&#xff08;PDF或图片&#xff09;&#xff0c;获取特定结构的数据&#xff0c;自动对比。抽取结构如&#xff1a; [标题,诉讼案号,执行案号,公积金,{原告: [姓名, 单位, 生…

无代码让我彻夜难眠

最近人工智能非常的火&#xff0c;特别是GPT&#xff0c;让一些程序员很慌。 但是GPT终归还是一个智能的搜索引擎&#xff0c;你可以问它某个问题或者算法问题&#xff0c;你让它快速开发一个系统&#xff0c;它能吗&#xff1f; 不能&#xff01; 但是无代码可以&#xff0…

【Android Studio】Flamingo版本 更新gradle插件 7.+到8.+

步骤 build.gradle(module) android {namespace //adddefaultConfig {applicationId }}AndroidManifest.xml 取消package属性 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/andr…

nginx负载均衡+反向代理

最近业务上遇到一个需求&#xff0c;其它系统因业务校验需要调用上级系统进行数据发送或校验&#xff0c;如果上级系统停机维护&#xff0c;其它下级系统发送的http通讯会丢失&#xff0c;还要一次次补发数据&#xff0c;耗费人工与时间。使用nginx反向代理解决了部分需求。 目…

【Java项目】从0到1完成Nacos配置文件扩展和共享

文章目录 环境配置配置文件名称空间和组扩展配置共享配置文件配置文件优先级 使用nacos作用配置中心的好处在于我们可以在云端上修改配置文件之后&#xff0c;使得本地的配置重新生效&#xff0c;从而做到不用重启项目也可以加载新的配置。 环境配置 首先引入依赖&#xff0c;…

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义&#xff1a; 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的&#xff1b; 其中&#xff0c;点通常被成为"顶点(vertex)“&#xff0c;而点与点之间的连线则被成为"边或弧”(edege)。 通常记为&#xff0c;G(V,E)。 图是一种重要的…

ANR中为什么会出现堆栈漂移

前言 我们排查ANR问题的时候&#xff0c;会发现有时候anr文件中捕获的堆栈信息&#xff0c;并不准确&#xff0c;而且经常会打印下面这样的堆栈&#xff1a; "main" prio5 tid1 Native| group"main" sCount1 ucsCount0 flags1 obj0x71ac6f78 self0xb4000…

java+mysql校园外卖订餐管理系统servlet

3.1 课题目的 对于客户而言&#xff0c;外卖订单管理系统最好是越方便操作&#xff0c;越简单越好。客户对于外卖订单系统&#xff0c;对他的首要要求就是能够安全&#xff0c;顺利的完成订单。但是很多时候开发人员更在意一些创新的模式&#xff0c;去增加用户的体验感或增值服…

关于变邻域搜索求解柔性作业车间问题的探讨

邻域结构交换内部关键块的操作 譬如&#xff0c;某案例的内部关键块为501—601—502—701&#xff0c;部分OS加工顺序码如下(标注的黄色底纹&#xff1a;为内部关键块) 在移动内部关键快操作时&#xff0c;请教各位是否是如下的变换&#xff1a; ① 块尾701 移至 块内工序50…

vs Git 本地服务器仓库配置

1、安装Git程序 Git 下载地址一https://git-scm.com/download/winGit 下载地址二We bring the awesome Git VCS to Windowshttps://gitforwindows.org/ 2、新建本地服务端仓库 2.1、新建文件夹&#xff0c;并创建仓库 在本地新建文件夹&#xff1a;//本地服务器仓库 在服务…

Vue+SpringBoot打造电子元器件管理系统(附源码文档)

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 一、摘要…

SSRS rdlc报表 七 安装及配置报表服务

开发环境 vs2022 sqlserver 2019 参考文档&#xff1a;安装 SQL Server Reporting Services - SQL Server Reporting Services (SSRS) | Microsoft Learn 配置 URL (Configuration Manager) - SQL Server Reporting Services (SSRS) | Microsoft Learn 如果你在安装数据库的…

基于html+css的图展示114

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

chatgpt赋能python:Python与Kafka的对接方法介绍

Python与Kafka的对接方法介绍 Kafka作为一种高吞吐量的分布式消息系统&#xff0c;近年来在数据处理、大数据分析以及实时流计算等领域得到了广泛的应用&#xff0c;成为了数据处理和分析领域中的标配。而Python作为一种简单易学、功能强大的编程语言&#xff0c;也因其在数据…