数组常见解决方案

数组常见解决方案

1.快慢指针(双指针)

慢指针记录当前位置 快指针寻找下一个符合条件的数 当符合条件时,此数将slow位置的数覆盖,slow指针指向下一个位置.

最后slow的位置就是符合条件的数组的长度.

在这里插入图片描述

80. 删除有序数组中的重复项 II - 力扣(LeetCode)

 public int removeDuplicates(int[] nums) {int slow = 2; for (int fast = 2; fast < nums.length; fast++) {if(nums[fast]!=nums[slow-2]){nums[slow++]=nums[fast];}}return slow;}

26. 删除有序数组中的重复项 - 力扣(LeetCode)

public int removeDuplicates(int[] nums) {int slow=1;int fast;for ( fast = 1; fast < nums.length; fast++) {if(nums[fast]!=nums[fast-1]){nums[slow++]=nums[fast];}}return slow;
}

27. 移除元素 - 力扣(LeetCode)
在这里插入图片描述

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

283. 移动零 - 力扣(LeetCode)
在这里插入图片描述

/*** 快慢指针法* @param nums*/
public void moveZeroes(int[] nums) {int slow =0;int fast;for ( fast = 0; fast  < nums.length; fast ++) {if(nums[fast ]!=0){nums[slow++]=nums[fast ];}}Arrays.fill(nums,slow,nums.length,0);}

2460. 对数组执行操作 - 力扣(LeetCode)

public int[] applyOperations(int[] nums) {for (int i = 0; i < nums.length-1; i++) {if(nums[i]==nums[i+1]){nums[i]=2*nums[i];nums[i+1]=0;}}int slow = 0;int fast;for ( fast = 0; fast < nums.length; fast++) {if(nums[fast]!=0){nums[slow++]=nums[fast];}}Arrays.fill(nums,slow,nums.length,0);return nums;

2.二分查找

前提:需要数组有序
在这里插入图片描述
在这里插入图片描述

704. 二分查找 - 力扣(LeetCode)

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

167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

方法一:二分查找+循环

public int[] twoSum(int[] numbers, int target) {ArrayList arrayList=new ArrayList();int temp=search(numbers,target);for (int i = 0; i < temp; i++) {for (int j = 1; j <= temp; j++) {if(numbers[i]+numbers[j]==target){arrayList.add(i);arrayList.add(j);}}}Object[] objects = arrayList.toArray();int[]res=new int[objects.length];for (int i = 0; i < objects.length; i++) {res[i]= (int) objects[i];}return res;}public static int search(int[] nums, int target) {int left=0;int right=nums.length-1;while (left<=right){int mid=(right-left)/2+left;if(nums[mid]<target){return mid;}if(nums[mid]<target){left=mid+1;}if(nums[mid]>target){right=mid-1;}}return -1;
}

方法二:双指针

public int[] twoSum(int[] numbers, int target) {int i = 0, j = numbers.length - 1;while (i < j) {int s = numbers[i] + numbers[j];if (s < target) i++;else if (s > target) j--;else return new int[] { i + 1, j + 1 };}return new int[0];
}

35. 搜索插入位置 - 力扣(LeetCode)

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

3.滑动窗体法

基本概念

Sliding window algorithm is used to perform required operation on specific window size of given large buffer or array.

滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作。

1456. 定长子串中元音的最大数目 - 力扣(LeetCode)
在这里插入图片描述

public int maxVowels(String s, int k) {int right=0;int VLen=0;int max=0;//未进入窗体while (right<s.length()){char c=s.charAt(right++);if(isV(c)){VLen++;}//进入窗体if(right>=k){max=Math.max(max,VLen);if(isV(s.charAt(right-k))){VLen--;}}}return max;
}public static boolean isV(char c){return c=='a'||c=='e'||c=='i'|| c=='o'|| c=='u';
}

11. 盛最多水的容器 - 力扣(LeetCode)
在这里插入图片描述

public int maxArea(int[] height) {int left=0;int right=height.length-1;int max=0;while (left<right){if(height[left]<height[right]){max=Math.max(max,height[left]*(right-left));left++;}else {max=Math.max(max,height[right]*(right-left));right--;}}return max;
}

209. 长度最小的子数组 - 力扣(LeetCode)
在这里插入图片描述

public int minSubArrayLen(int target, int[] nums) {int left=0;int right=0;int WinSum=0;int min=Integer.MAX_VALUE;while (right<nums.length){WinSum+=nums[right++];while (WinSum>=target){min=Math.min(min,right-left);WinSum-=nums[left++];}}if(min==Integer.MAX_VALUE){min=0;}return min;
}

LCR 016. 无重复字符的最长子串 - 力扣(LeetCode)
在这里插入图片描述

public int lengthOfLongestSubstring(String s) {int left=0;int right=0;int max=0;int []count=new int[128];while (right<s.length()){char c=s.charAt(right++);count[c]++;while (count[c]>1){char c1=s.charAt(left++);count[c1]--;}max=Math.max(max,right-left);}return max;
}

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

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

相关文章

智能学习平台系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…

前端项目搭建和基础配置

这个模块主要是介绍从零开始搭建项目的一些操作&#xff0c;包含一些前端常用的配置&#xff0c;这里只是一部分&#xff0c;会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称&#xff0c;框架选择Vue…

RC2在线加密工具

RC2是由著名密码学家Ron Rivest设计的一种传统对称分组加密算法&#xff0c;它可作为DES算法的建议替代算法。RC2是一种分组加密算法&#xff0c;RC2的密钥长度可变&#xff0c;可以从8字节到128字节&#xff0c;安全性选择更加灵活。 开发调试上&#xff0c;有时候需要进行对…

Qt Desiogn生成的ui文件转化为h文件

1.找到这个工具 2.查找到ui文件以及要转化为的h文件的路径。 3.在1中的工具输入uic /xx/xxx.ui -o /xx/xxx.h即可得到结果。

多元线性回归分析

介绍: 回归分析是一种强大的统计方法&#xff0c;用于研究变量之间的关系&#xff0c;特别是一个或多个自变量与一个因变量之间的定量关系。 总结就是研究X和Y之间的相关性的分析 First:相关性: 相关性不代表因果性, Eg:统计数据表明:游泳死亡人数越高&#xff0c;雪糕卖得…

移动端布局 ---- 学习分享

响应式布局实现方法 主流的实现方案有两种: 通过rem \ vw/vh \ 等单位,实现在不同设备上显示相同比例进而实现适配. 响应式布局,通过媒体查询media 实现一套HTML配合多套CSS实现适配. 在学习移动端适配之前,还需要学习移动端适配原理: 移动端适配原理(Viewport) 了解VSCo…

【大数据2025】Hadoop 万字讲解

文章目录 一、大数据通识大数据诞生背景与基本概念大数据技术定义与特征大数据生态架构概述数据存储数据计算与易用性框架分布式协调服务和任务调度组件数仓架构流处理架构 二、HDFSHDFS 原理总结一、系统架构二、存储机制三、数据写入流程四、心跳机制与集群管理 安全模式&…

彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构

目录 什么是系统架构 单体架构 介绍 示例图 优点 缺点 集群架构 介绍 示意图 优点 缺点 分布式架构 示意图 优点 缺点 生态扩展 介绍 示意图 优点 缺点 扩展&#xff1a;分布式服务解析 纵切拆服务 全链路追踪能力 循环依赖 全链路日志&#xff08;En…

Typora + PowerShell 在终端打开文件

最近在用 Hexo 搭我人生中的第一个博客&#xff0c;Hexo 新建帖子的时候需要在终端用命令hexo n&#xff0c;然后再用 Typora 打开&#xff0c;用鼠标感觉很麻烦&#xff0c;因此直接用终端一键启动了。 发现 Typora 的一个 bug&#x1f41b;&#xff0c;在 YAML 后面写第一个字…

【RAG落地利器】向量数据库Qdrant使用教程

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 环境依赖 本教程基于docker安装Qdrant数据库&#xff0c;在此之前请先安装docker. Docker - The easiest way to use Qdrant is to run a pre-built Docker i…

设计模式-单例模式

定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 类型 饿汉式 线程安全&#xff0c;调用效率高&#xff0c;但是不能延迟加载。 public class HungrySingleton {private static final HungrySingleton instancenew HungrySingleton();private …

初学stm32 --- CAN

目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答&#xff0c;这样的好处是&#xff0c;不管是头节点还是中间的节点都可以当成是中间节点来处理&#xff0c;用同一套方法就可以进行处理&#xff0c;而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

汽车网络信息安全-ISO/SAE 21434解析(上)

目录 概述 第四章-概述 1. 研究对象和范围 2. 风险管理 第五章-组织级网络安全管理 1. 网络安全治理&#xff08;cybersecurity governance&#xff09; 2. 网络安全文化&#xff08;cybersecurity culture) 3. 信息共享&#xff08;Information Sharing) 4. 管理体系…

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制&#xff08;也称为私钥密码体制、对称密码体制&#xff09;和公钥密码体制&#xff08;也称为非对称密码体制、公开密钥加密技术&#xff09;。 一、对称密钥密码体制 定义&#xff1a; 对称密钥密码体制是一种传…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言&#xff1a;在当今数字化时代&#xff0c;分布式系统和大数据处理变得愈发普遍&#xff0c;消息队列作为其中的关键组件&#xff0c;承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测

OpenCV中边缘检测四种常用算子&#xff1a; &#xff08;1&#xff09;Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度&#xff0c;并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核&#xff0c;分别用于计…