当前位置: 首页 > news >正文

day54【代码随想录】二刷数组

文章目录

  • 前言
  • 一、二分查找(力扣724)
  • 二、移除元素(力扣27)【双指针】
  • 三、有序数组的平方(力扣977)【双指针】
  • 四、合并两个有序数组(力扣88)
  • 五、长度最小的子数组(力扣209)【滑动窗口】
  • 六、水果成篮(力扣904)【滑动窗口】****
  • 七、最小覆盖子串(力扣76)【滑动窗口】****
  • 八、最大连续1的个数 III(力扣1004)【滑动窗口】
  • 九、无重复字符的最长子串(力扣3)【滑动窗口】****
  • 总结


前言

1、二分查找
2、移除元素
3、有序数组的平方
4、合并两个有序数组
5、长度最小的子数组
6、水果成篮
7、最小覆盖字串
8、最大连续1的个数|||
9、无重复字符的最长字串


一、二分查找(力扣724)

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int left;int right;int mid;int index = -1;left = 0;right = nums.length-1;while(left<=right){mid = (left+right)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else if (nums[mid]==target){return mid;}}return index;    }
}

二、移除元素(力扣27)【双指针】

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
在这里插入图片描述

class Solution {public int removeElement(int[] nums, int val) {int fast;int slow;for(fast=0,slow=0; fast<nums.length;){if(nums[fast]==val){fast++;}else{nums[slow++] = nums[fast++];}}return slow;}
}

三、有序数组的平方(力扣977)【双指针】

有一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
在这里插入图片描述
暴力求解省略:
每个数平方之后,排个序,美滋滋
时间复杂度:O(n + nlogn),
请添加图片描述

class Solution {public int[] sortedSquares(int[] nums) {int[] res = new int[nums.length];int slow=0;int fast=nums.length-1;int index = nums.length-1;for(slow=0,fast=nums.length-1;slow<=fast;){if(nums[slow]*nums[slow]>=nums[fast]*nums[fast]){res[index--]=nums[slow]*nums[slow]; slow++;}else{res[index--]=nums[fast]*nums[fast];fast--;}}return res;}
}

时间复杂度:O(n)

四、合并两个有序数组(力扣88)

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
在这里插入图片描述

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m-1;int j = n-1;int index = nums1.length-1;for(;j>=0;){if(i<0||nums1[i]<=nums2[j]){nums1[index--] = nums2[j];j--;}else{nums1[index--] = nums1[i];i--;}}}
}

注意要考虑边界条件:
在这里插入图片描述

五、长度最小的子数组(力扣209)【滑动窗口】

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
在这里插入图片描述
暴力求解:
两个for循环,然后不断的寻找符合条件的子序列,时间复杂度很明显是O(n^2)。

		for (int i = 0; i < nums.length; i++) { // 设置子序列起点为isum = 0;for (int j = i; j < nums.length; j++) { // 设置子序列终止位置为jsum += nums[j];if (sum >= s) { // 一旦发现子序列和超过了s,更新resultsubLength = j - i + 1; // 取子序列的长度result = result < subLength ? result : subLength;break; // 因为我们是找符合条件最短的子序列,所以一旦符合条件就break}}

滑动窗口:
滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果
在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。那么滑动窗口用一个for循环来完成这个操作。

滑动窗口问题一:如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置
滑动窗口问题二:如何遍历剩下的终止位置?
滑动窗口问题三:滑动窗口的起始位置如何移动?

class Solution {public int minSubArrayLen(int target, int[] nums) {int left =0;int right;int subLength = Integer.MAX_VALUE;     int res=0;//滑动窗口一个for循环表示(滑动窗口终止位置)for(right=0;right<nums.length;right++){res+=nums[right];while(res>=target){subLength = Math.min(subLength,right-left+1);res -= nums[left++];}}return subLength == Integer.MAX_VALUE? 0:subLength;}
}

六、水果成篮(力扣904)【滑动窗口】****

fruits[i] 是第 i 棵树上的水果 种类 。
想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘
一旦走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回可以收集的水果的最大数目。

白话题意:求满足某个条件(数组值最多就两类的连续数组,例如[1,2,2,1,2])的最长数组长度
在这里插入图片描述

class Solution {public int totalFruit(int[] fruits) {HashMap<Integer,Integer> map = new HashMap<>();int res =0;int i=0;int j=0;while(j<fruits.length){//判断当前是否满足条件?map.put(fruits[j],map.getOrDefault(fruits[j],0)+1);while(map.size()>2){//不满足条件//把加进来i的都移出去map.put(fruits[i],map.get(fruits[i])-1);if(map.get(fruits[i])==0){map.remove(fruits[i]);}i++;}//更新结果res = Math.max(res,j-i+1);j++;}return res;}
}

For me 比较考验map数组的使用

七、最小覆盖子串(力扣76)【滑动窗口】****

一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。

同样是滑动窗口,这两题有什么区别?区别在于904题求的是最大滑窗,而本题求的是最小滑窗
在这里插入图片描述

class Solution {public String minWindow(String s, String t) {//最小滑动窗口:int[] need = new int[128];//记录t中需要字符的个数for(int i =0; i<t.length();i++){need[t.charAt(i)]++;}int i=0;int j=0;String res = "";int count = t.length();int size = Integer.MAX_VALUE;int start =0;while(j<s.length()){//判断是否满足条件if(need[s.charAt(j)]>0){count--;}need[s.charAt(j)]--; //把右边字符加入窗口while(count==0){ //满足条件 窗口中已经包含所有元素// 一旦满足条件,尽可能的压缩i,并且不断更新结果//更新结果值while(i<j && need[s.charAt(i)]<0){ //压缩左窗口need[s.charAt(i)]++;i++;}if(j-i+1<size){size = j-i+1;  //更新结果值start = i;  //需要记录窗口的起始位置}need[s.charAt(i)]++;i++;count++;}j++;}return size == Integer.MAX_VALUE? "" :s.substring(start,start+size);}
}

窗口扩展时寻找可行解,窗口收缩时优化可行解。而且这个题可行解每次都是一个

八、最大连续1的个数 III(力扣1004)【滑动窗口】

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
最大滑动窗口:

class Solution {public int longestOnes(int[] nums, int k) {int i =0;int j =0;int size = 0;int zeroCount =0;while(j<nums.length){ //滑动窗口终止位置//判断是否满足条件  把k个0翻转为1if(nums[j]==0 ){zeroCount++;}//不满足条件:while(zeroCount>k){//缩小左边界,一旦左边界满足 就退出循环,尽可能取到窗口的最大长度if(nums[i]==0){zeroCount--;}i++;}//更新结果size = Math.max(size,j-i+1);j++;}return size;}
}

九、无重复字符的最长子串(力扣3)【滑动窗口】****

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
在这里插入图片描述
取滑动窗口最大值:

class Solution {public int lengthOfLongestSubstring(String s) {if(s.length()==0) return 0;//最大滑动窗口int i=0;int j=0;int size = 0;HashMap<Character,Integer> map = new HashMap<>();while(j<s.length()){if(map.containsKey(s.charAt(j))){ //看当前的字符串中是否有重复的i = Math.max(i,map.get(s.charAt(j))+1);}map.put(s.charAt(j),j);size = Math.max(size,j-i+1);j++;}return size;}
}

总结

滑动窗口模板:
来源:滑动窗口模板参考链接

最小滑窗模板:给定数组 nums,定义滑窗的左右边界 i, j,求满足某个条件的滑窗的最小长度。

while j < len(nums):判断[i, j]是否满足条件while 满足条件:不断更新结果(注意在while内更新!)i += 1 (最大程度的压缩i,使得滑窗尽可能的小)j += 1

最大滑窗模板:给定数组 nums,定义滑窗的左右边界 i, j,求满足某个条件的滑窗的最大长度。

while j < len(nums):判断[i, j]是否满足条件while 不满足条件:i += 1 (最保守的压缩i,一旦满足条件了就退出压缩i的过程,使得滑窗尽可能的大)不断更新结果(注意在while外更新!)j += 1

相关文章:

day54【代码随想录】二刷数组

文章目录前言一、二分查找&#xff08;力扣724&#xff09;二、移除元素&#xff08;力扣27&#xff09;【双指针】三、有序数组的平方&#xff08;力扣977&#xff09;【双指针】四、合并两个有序数组&#xff08;力扣88&#xff09;五、长度最小的子数组&#xff08;力扣209&…...

哪个品牌蓝牙耳机性价比高?性价比高的平价蓝牙耳机推荐

现如今&#xff0c;随着蓝牙技术的进步&#xff0c;蓝牙耳机在人们日常生活中的便捷性更胜从前。越来越多的蓝牙耳机品牌被大众看见、认可。那么&#xff0c;哪个品牌的蓝牙耳机性价比高&#xff1f;接下来&#xff0c;我给大家推荐几款性价比高的平价蓝牙耳机&#xff0c;一起…...

揭秘关于TFRcord的五脏六腑

揭秘关于TFRcord的五脏六腑 前言&#xff1a;本篇文章将演示如何创建、解析和使用tf.Example消息&#xff0c;以及如何在.tfrecord文件之间对tf.Example消息进行序列化、写入和读取。 教程讲解使用的都是结构化数据&#xff0c;文章最后还会演示如果将图片写成.tfrecord文件&am…...

【Shell学习笔记】3.Shell 传递参数及数组

前言 本章介绍Shell的传递参数和数组。 Shell 传递参数 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;…...

【终结Bug】ModuleNotFoundError: No module named ‘cv2’

解决方案&#xff1a; 打开 cmd键入 pip install opencv_python -i https://pypi.tuna.tsinghua.edu.cn/simple...

SQL Server2008详细安装步骤(保姆式教程)

安装包下载 链接&#xff1a;https://pan.baidu.com/s/1Rjx4DHJBeCW2asC_4Kzo6Q?pwdchui 提取码&#xff1a;chui 安装过程 1.解压后使用管理员身份打开安装程序 2.选择全新安装或向现有安装添加新功能 3.确认 4.输入产品密钥&#xff08;上方网盘安装包里有&#xff0…...

Linux常用操作

Linux常用操作 前言常用命令&#xff1a;一些操作命令&#xff1a;前言 本文是笔者在使用cadence的过程中&#xff0c;操作linux的笔记&#xff0c;仅记录个人常用&#xff0c;持续更新 常用命令&#xff1a; &#xff08;1&#xff09;高频&#xff1a;会了这几个就能在文件…...

Golang 处理parquet文件实战教程

Parquet是Apache基金会支持的项目&#xff0c;是面向列存储二进制文件格式。支持不同类型的压缩方式&#xff0c;广泛用于数据科学和大数据环境&#xff0c;如Hadoop生态。 本文主要介绍Go如何生成和处理parquet文件。 创建结构体 首先创建struct&#xff0c;用于表示要处理…...

腾讯TIM实现即时通信 v3+ts实践

目录 初始化sdk 功能描述 初始化 准备 SDKAppID 调用初始化接口 监听事件 发送消息 创建消息 创建文本消息 登录登出 功能描述 登录 登出 销毁 登录设置 获取会话列表 功能描述 获取会话列表 获取全量的会话列表 历史消息 功能描述 拉取消息列表 分页拉取…...

华为OD机试 - 回文字符串(Java JS Python)

题目描述 如果一个字符串正读和反渎都一样(大小写敏感),则称它为一个「回文串」,例如: leVel是一个「回文串」,因为它的正读和反读都是leVel;同理a也是「回文串」art不是一个「回文串」,因为它的反读tra与正读不同Level不是一个「回文串」,因为它的反读leveL与正读不…...

APP测试的7大注意点。

1. 运行 1&#xff09; App安装完成后的试运行&#xff0c;可正常打开软件。 2&#xff09; App打开测试&#xff0c;是否有加载状态进度提示。 3&#xff09; App⻚面间的切换是否流畅&#xff0c;逻辑是否正确。 4&#xff09; 注册 同表单编辑⻚面 用户名密码⻓度 …...

设计模式-第4章(装饰模式)

装饰模式装饰模型装饰模式示例商场收银程序&#xff08;简单工厂策略装饰模式实现&#xff09;装饰模式总结装饰模型 装饰模式&#xff08;Decorator&#xff09;&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为…...

【算法设计-分治】快速幂与龟速乘

文章目录1. 快速幂2. 龟速乘3. 快速幂取模4. 龟速乘取模5. 快速幂取模优化1. 快速幂 算法原理&#xff1a; 计算 311&#xff1a; 311 (35)2 x 335 (32)2 x 332 3 x 3仅需计算 3 次&#xff0c;而非 11 次 计算 310&#xff1a; 310 (35)235 (32)2 x 332 3 x 3仅需计算…...

基于新一代kaldi项目的语音识别应用实例

本文是由郭理勇在第二届SH语音技术研讨会和第七届Kaldi技术交流会上对新一代kaldi项目在学术及“部署”两个方面报告的内容上的整理。如果有误&#xff0c;欢迎指正。 文字整理丨李泱泽 编辑丨语音小管家 喜报&#xff1a;新一代Kaldi团队三篇论文均被语音顶会ICASSP-2023接…...

【GO】31.grpc 客户端负载均衡源码分析

这篇文章是记录自己查看客户端grpc负载均衡源码的过程&#xff0c;并没有太详细的讲解&#xff0c;参考价值不大&#xff0c;可以直接跳过&#xff0c;主要给自己看的。一.主要接口&#xff1a;Balancer Resolver1.Balancer定义Resolver定义具体位置为1.grpc源码对解析器(resol…...

PTA L1-058 6翻了(详解)

前言&#xff1a;内容包括&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; “666”是一种网络用语&#xff0c;大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”&#xff0c;意思是“6翻了”&#xff0…...

【Origin科研绘图】如何快速绘制一个折线图 ||【前端特效】爱心篇 之 幸好有你 || 泰坦尼克号——乘客生存与否 预测 || PyCharm使用介绍

🎯作者主页:追光者♂ 🌸个人简介:在读计算机专业硕士研究生、CSDN-人工智能领域新星创作者🏆、2022年CSDN博客之星人工智能领域TOP4🌟、阿里云社区专家博主🏅 【无限进步,一起追光!】 🍎欢迎点赞👍 收藏⭐ 留言📝 🌿本篇,首先是:基于科研绘图工具O…...

一文解读电压放大器(电压放大器原理)

关于电压放大器的科普知识&#xff0c;之前讲过很多&#xff0c;今天为大家汇总一篇文章来详细的讲解电压放大器&#xff0c;希望大家对于电压放大器能有更清晰的认识。电压放大器是什么&#xff1a;电压放大器是一种常用的电子器件&#xff0c;它的主要作用是把输入信号的振幅…...

线上监控诊断神器arthas

目录 什么是arthas 常用命令列表 1、dashboard仪表盘 2、heapdump dumpJAVA堆栈快照 3、jvm 4、thread 5、memory 官方文档 安装使用 1、云安装arthas 2、获取需要监控进程ID 3、运行arthas 4、进入仪表盘 5、其他命令使用查看官方文档 什么是arthas arthas是阿…...

@Import注解的原理

此注解是springboot自动注入的关键注解&#xff0c;所以拿出来单独分析一下。 启动类的run方法跟进去最终找到refresh方法&#xff1b; 这里直接看这个org.springframework.context.support.AbstractApplicationContext#refresh方法即可&#xff0c;它下面有一个方法 invoke…...

平台总线开发(id和设备树匹配)

目录 一、ID匹配之框架代码 二、ID匹配之led驱动​​​​​​​ 三、设备树匹配 四、设备树匹配之led驱动 五、一个编写驱动用的宏 一、ID匹配之框架代码 id匹配&#xff08;可想象成八字匹配&#xff09;&#xff1a;一个驱动可以对应多个设备 ------优先级次低 注意事项…...

TS泛型,原来就这?

一、泛型是什么&#xff1f;有什么作用&#xff1f; 当我们定义一个变量不确定类型的时候有两种解决方式&#xff1a; 使用any 使用any定义时存在的问题&#xff1a;虽然知道传入值的类型但是无法获取函数返回值的类型&#xff1b;另外也失去了ts类型保护的优势 使用泛型 泛型…...

关于算法学习和刷题的建议

大家好&#xff0c;我是方圆。最近花时间学了学算法&#xff0c;应该算是我接触Java以来第一次真正的学习它&#xff0c;这篇帖子我会说一些我对算法学习的理解&#xff0c;当然这仅仅是浅浅的入算法的门&#xff0c;如果想深挖或者是有基础的人想提升自己&#xff0c;我觉得这…...

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…...

http协议简介

http 1.简介 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处…...

CSDN 第三十一期竞赛题解

第二次参加 总分77.5&#xff0c;主要是在最后一题数据有误&#xff0c;花费了巨量时间… 参加的另一次比赛最后一道题目也出现了一点问题&#xff0c;有点遗憾。 题解 T1&#xff1a;最优利润值 你在读的经营课程上&#xff0c;老师布置了一道作业。在一家公司的日常运营中&…...

EM_ASM系列宏定义(emscripten)

2.5 EM_ASM系列宏很多编译器支持在C/C代码直接嵌入汇编代码&#xff0c;Emscripten采用类似的方式&#xff0c;提供了一组以“EM_ASM”为前缀的宏&#xff0c;用于以内联的方式在C/C代码中直接嵌入JavaScript代码。2.5.1 EM_ASMEM_ASM使用很简单&#xff0c;只需要将欲执行的Ja…...

Batchnorm和Layernorm的区别

在深度学习训练中&#xff0c;我们经常会遇到这两个归一化操作&#xff0c;他们之间有什么区别呢&#xff1f;我们来简单介绍一下&#xff1a; BatchNorm&#xff1a; 在深度学习训练的时候我们的数据如果没有经过预处理&#xff0c;有可能会出现梯度消失或者梯度爆炸的情况&…...

高级前端面试题汇总

iframe 有那些优点和缺点&#xff1f; iframe 元素会创建包含另外一个文档的内联框架&#xff08;即行内框架&#xff09;。 优点&#xff1a; 用来加载速度较慢的内容&#xff08;如广告&#xff09;可以使脚本可以并行下载可以实现跨子域通信 缺点&#xff1a; iframe 会…...

HTML#5表单标签

一. 表单标签介绍表单: 在网页中主要负责数据采集功能,使用<form>标签定义表单表单项: 不同类型的input元素, 下拉列表, 文本域<form> 定义表单<input> 定义表单项,通过typr属性控制输入形式<label> 为表单项定义标注<select> 定义下拉列表<o…...

巴南集团网站建设/seo概念

最近项目中新增的功能&#xff0c;需要对手机号、姓名、身份证号等一些信息进行验证&#xff0c;最好的方法是通过正则表达式来验证&#xff0c;网上查了一些资料&#xff0c;写了这几个工具方法。 1、验证手机号 规则&#xff1a;第一位只能是1&#xff0c;第二位为3-8中的数字…...

男男床做第一次视频网站/百度指数上多少就算热词

遇到的问题今天遇到一个线上的BUG&#xff0c;在执行表单提交时失败&#xff0c;但是从程序日志中看不到任何异常信息。在Review源代码时发现&#xff0c;当catch到异常时只是输出了e.getMessage()&#xff0c;如下所示&#xff1a;logger.error("error: {}, {}", pa…...

微信销售小程序/长沙seo推广优化

点击上方【牵引小哥讲Python】&#xff0c;关注回复【资源】领取学习资源&#xff01;原创作者&#xff1a;牵引小哥微信公众号&#xff1a;牵引小哥讲Python注&#xff1a;转载或复制请注明出处——牵引小哥之前小哥已经讲解了Matplotlib和Seaborn两种绘图库。相较于Matplotli…...

三里屯做网站的公司/售卖链接

Window>>Preferences>>General>>Editors>>Text Editors>>Annotations 选中右边的Warnings 把旁边的勾都去掉.. 转载于:https://www.cnblogs.com/zhaogaojian/p/6601578.html...

网站排行榜/口碑营销经典案例

svn安装&#xff1a; SVN1.6.11安装过程概述一.安装1.将subversion-1.6.11.tar.gz和subversion-deps-1.6.11.tar.gz传到服务器。tar xfvz subversion-1.6.11.tar.gztar xfvz subversion-deps-1.6.11.tar.gzchown -R root.root subversion-1.6.11cd subversion-1.6.11./configur…...

百度推广网站建设费/搜索排名广告营销

2019独角兽企业重金招聘Python工程师标准>>> CSS的十八般技巧 一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小&#xff0c;更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》&#xff0c;这 里就不展开描述。 二.明确定义单位&#xff0c;除非值…...