LeetCode 热题 100 Day03

普通数组

常见的题型有:

        取模、区间合并、最大子序列和、最长非0子序列等。

一些解题思路很巧妙,多练多总结。

Leetcode 53. 最大子数组和 [dp动态查找最大值]

题目理解

        给定一个整数数组, 求一个连续的子序列

        该子序列满足和最大

        要求返回最大和

解题思路: 

       动态规划的思路

        定义dp数组  dp[i]表示以i为结尾的子序列的最大值

        则有递推公式:

        dp[i]=max(dp[i-1]+nums[i],nums[i])

        其本质表达的是:是需要前面的前缀还是从i位置重新计算

        用max维护整个数组中,最大的子序列和

1.解题

动态规划版解题

class Solution {public int maxSubArray(int[] nums) {int[] dp=new int[nums.length];dp[0]=nums[0];int max=nums[0];for(int i=1;i<nums.length;i++){dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);max=Math.max(max,dp[i]);}return max;}
}

2.复杂度分析

时间复杂度:O(n) 遍历数组的时间

空间复杂度:O(1) max的存储空间损耗

Leetcode 56. 合并区间  [排序,合并]

 

题意理解

        给定多个区间

        要求对相互交叠的区间进行合并。

解题思路

        为了方便进行合并,以所有区间的左边界为准进行排序。

        当区间i的右边界>=i+1区间的左边界时,两区间交叠——进行合并操作

                合并有两种情况:

                i+1的右边界<=i右边界:即i+1区间包含在i区间内, 将合并的区间更新至i+1位置

                i+1的右边界>i的右边界:即对i区间的右边界进行更新,更新为最远右边界,将合并的区间更新至i+1位置

        当区间i的右边界<i+1区间的左边界时,两区间不交叠

        当且仅当下一区间不交叠时,将当前合并的区间加入结果集

1.解题

class Solution {public int[][] merge(int[][] intervals) {int len=intervals.length;Arrays.sort(intervals,(a,b)->{return a[0]-b[0];});LinkedList<int[]> result=new LinkedList<>();result.add(new int[]{intervals[0][0],intervals[0][1]});for(int i=1;i<len;i++){//交叠if(intervals[i-1][1]>=intervals[i][0]){intervals[i][1]=Math.max(intervals[i-1][1],intervals[i][1]);result.getLast()[1]=intervals[i][1]; }else{result.add(new int[]{intervals[i][0],intervals[i][1]});}}int[][] resultArr=new int[result.size()][2];for(int i=0;i<result.size();i++){resultArr[i][0]=result.get(i)[0];resultArr[i][1]=result.get(i)[1];}return resultArr;}
}

2.复杂度分析

时间复杂度:O(nlog) sort排序的时间损耗

空间复杂度:O(2n) 区间数组的空间损耗

3.技巧

如何按左边界进行排序

//按照左边界升序排序
Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));

Leetcode 189. 轮转数组  [技巧,取模]

 

题意理解

        给定一个数组,每次向右旋转轮转k, 求轮转后的结果值

解题思路

        将原数组下标为 i的元素放至新数组下标为 (i+k) mod n 的位置

        其可以想象为,在nums前方防止k个空位置,则当前的坐标就变成了i+k

        但是数组大小为n, 则为了将超出数组的元素重新放入对应元素位置,则有

        index=(i+k)mod n  (取模运算总是在循环0-n-1之间的值)

1.解题

class Solution {public void rotate(int[] nums, int k) {int len=nums.length;int[] result= Arrays.copyOfRange(nums,0,len);for(int i=0;i<len;i++){nums[(i+k)%len]=result[i];}}
}

2.复杂度分析

时间复杂度:O(n) 遍历数组的时间损耗

空间复杂度:O(n) 存储结果的空间损耗

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

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

相关文章

使用 Rust 和 DDD 构建 API 服务器

Introduction 介绍 I tried implementing an API server using Rust and the Axum framework. 我尝试使用 Rust 和 Axum 框架实现 API 服务器。 Target Audience 本文受众 Those who want to implement an API server with Rust. 那些想要用 Rust 实现 API 服务器的人。Those w…

Springboot+Vue项目-基于Java+MySQL的校园周边美食探索及分享平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

SU-03T语音识别

语音识别的由SU-03T、咪头、喇叭、还有一个CH340串口组成。SU-03T不需要代码的写入&#xff0c;直接可以进行配置就可以使用&#xff0c;极大降低了开发难度。 为客户提供超低成本的离线语 音识别方案&#xff0c;可广泛且快速应用于智能家居&#xff0c;各类智能小家电&#x…

【Git】Git的安装与常用命令

Git的安装与常用命令 一、Git的安装 &#xff08;一&#xff09;下载 官网下载&#xff1a;https://git-scm.com/downloads 镜像网站&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ &#xff08;二&#xff09;安装 双击安装&#xff0c…

Elasticsearch分布式搜索

实用篇-ES-环境搭建 ES是elasticsearch的简称。我在SpringBoot学习 数据层解决方案 的时候&#xff0c;写过一次ES笔记&#xff0c;可以结合一起看一下。 之前在SpringBoot里面写的相关ES笔记是基于Windows的&#xff0c;现在我们是基于docker容器来使用&#xff0c;需要你们提…

安装jmeter和ant

安装jmeter和ant 安装java环境 安装jdk和jre 下载Java SE Development Kit 8 Java SE subscribers will receive JDK 8 updates until at least December 2030. 选择指定包进行安装&#xff0c;如windows 共享账号参考&#xff1a;Oracle官网 账号及密码 目前官网下载低…

K12智慧校园-学工中心

1 系统概述 学工管理系统用于帮助学校学工部门负责拟定学院年度学生工作计划&#xff0c;提出年度学生工作思路及工作要点&#xff0c;并负责指导各系开展学生工作&#xff1b;负责学院的学风建设与校园文明督查&#xff1b;负责新生军训工作的组织、协调和安排&#xff1b;负…

顺序表 (头删 尾删 清空)

//头删 | 1 #include "head.h" | 1 #ifndef ww87 void head_del(p lp) | 2 int main(int argc, const char *argv[]) …

js纯前端实现语音播报,朗读功能(2024-04-15)

实现语音播报要有两个原生API 分别是【window.speechSynthesis】【SpeechSynthesisUtterance】 项目代码 // 执行函数 initVoice({text: 项目介绍,vol: 1,rate: 1 })// 函数 export function initVoice(config) {window.speechSynthesis.cancel();//播报前建议调用取消的函数…

[阅读笔记2][FLAN]FINETUNED LANGUAGE MODELS ARE ZERO-SHOT LEARNERS

接下来这篇是谷歌的FLAN&#xff0c;提出了指令微调这一新范式&#xff0c;在2022年发表。 这篇论文指出GPT3的zero-shot性能相比few-shot性能差太多了。他们发现如果对预训练模型进行指令微调能使zero-shot性能显著提升&#xff0c;下面右图显示指令微调后zero-shot比GPT3 few…

Ubuntu 22.04安装中文输入法

1. 安装 sudo apt install fcitx5 2. 管理已安装的语言 Setting->Region & Language->Manage Installed Language 在下图中点击“安装”&#xff0c;之后需要等一会 选择Fcitx 5 3. 添加输入法 Setting->Keyboard 点击chinese 选择你想要的输入法 重启一下&a…

【STL】迭代器iterator详解

前言 本篇文章以对string的操作来演示迭代器的操作。 一、什么是迭代器iterator&#xff1f; 迭代器&#xff08;iterator&#xff09;是一种可以遍历容器元素的数据类型。迭代器是一个变量&#xff0c;相当于容器和操纵容器的算法之间的中介。C迭代器是一种用于遍历容器中元的…

火车头采集一键发布到Zblog

火车头采集发布到Zblog系统&#xff0c;主要操作步骤如下&#xff1a; 目录 1、Zblog火车头Web发布模块 2、内容发布参数映射&#xff0c;火车头发布到Zblog 3、简数一键发布到Zblog方法 1、Zblog火车头Web发布模块 自行编写Zblog火车头Web发布模块&#xff0c;一般要使用f…

突破编程_前端_SVG(ellipse 椭圆形)

1 ellipse 元素的基本属性和用法 ellipse 元素用于创建椭圆形状。它具有一系列的基本属性&#xff0c;允许自定义椭圆的外观和位置。以下是一些 ellipse 元素的基本属性和用法&#xff1a; &#xff08;1&#xff09;基本属性 cx 和 cy&#xff1a;这两个属性定义了椭圆中心…

[Java EE] 计算机工作原理与操作系统简明概要

1. 计算机工作原理 1.1 生活中常见的计算机 计算机分为通用计算机和专用计算机,计算机并不单单指的是电脑,还有我们平时使用的手机,ipad,智能手表等终端设备都是计算机.还有我们用户不常见的计算机,比如服务器. 还有许多嵌入式设备(针对特定场景定制的"专用计算机"…

Suno,属于音乐的ChatGPT时刻来临

AI绘画 AI视频我们见过了&#xff0c;现如今AI都能生成一首音乐&#xff0c;包括编曲&#xff0c;演唱&#xff0c;而且仅需几秒的时间便可创作出两分钟的完整歌曲 相信关注苏音的很大一部分都是从获取编曲或者混音插件来的&#xff0c;现如今AI却能帮你几秒生成曲子 今天就带…

海外云手机怎么解决tiktok运营难题?

最近打算做TikTok的商家越来越多了&#xff0c;而做TikTok的第一步就面临如何养号、涨粉的困境&#xff0c;本文将介绍如何通过海外云手机轻松解决这些问题。 早期大家用的比较多的&#xff0c;是真机科学上网的方法。但是这种方法&#xff0c;需要自己搭建海外环境&#xff0c…

网络篇09 | 运输层 udp

网络篇09 | 运输层 udp 01 简介UDP 是面向报文的 02 报文协议 01 简介 UDP 只在 IP 的数据报服务之上增加了一些功能&#xff1a;复用和分用、差错检测 UDP 的主要特点&#xff1a;无连接。发送数据之前不需要建立连接。 使用尽最大努力交付。即不保证可靠交付。 面向报文。…

DRF视图组件(2个视图基类、5个视图扩展类、9个视图子类、视图集和路由映射)

DRF视图组件(2个视图基类、5个视图扩展类、9个视图子类、视图集和路由映射) 目录 DRF视图组件(2个视图基类、5个视图扩展类、9个视图子类、视图集和路由映射)2个视图基类mixins的5个视图扩展类generics的9个视图子类视图集自定制返回格式自动生成路由(SimpleRouter)action装饰器…

[lesson30]操作符重载的概念

操作符重载的概念 操作符重载 C中的重载能够扩展操作符的功能 操作符的重载以函数的方式进行 本质&#xff1a; 用特殊形式的函数扩展操作符的功能 通过operator关键字可以定义特殊的函数 operator的本质是通过函数重载操作符 语法&#xff1a; 可以将操作符重载函数定…