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

双指针解决n数之和问题

1. 两数之和

1. 两数之和

  • 将时间复杂度降到O(n);
class Solution {// 双指针public int[] twoSum(int[] nums, int target) {int n=nums.length;int l=0;while(l<n){int r=n-1;// 找到第一个可能nums[l]+nums[r]==target的位置while(r>l){if(nums[l]+nums[r]==target){return new int[]{l,r};}r--;}l++;}return new int[0];}
}
class Solution {// 哈希表 public int[] twoSum(int[] nums, int target) {int n=nums.length;HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<n;i++){map.put(nums[i],i);}for(int i=0;i<n;i++){int another=target-nums[i];if(map.containsKey(another)&&map.get(another)!=i){return new int[]{i,map.get(another)};}}return new int[0];}
}

2. 两数之和 II - 输入有序数组

167. 两数之和 II - 输入有序数组

  • 将时间复杂度降到O(n);
class Solution {// 双指针public int[] twoSum(int[] numbers, int target) {int n=numbers.length;int l=0;while(l<n){int r=n-1;// 找到第一个可能nums[l]+nums[r]==target的位置while(r>l){if(numbers[l]+numbers[r]==target){return new int[]{l+1,r+1};}r--;}l++;}return new int[0];}
}
class Solution {// 双指针public int[] twoSum(int[] numbers, int target) {int l=0,r=numbers.length-1;while(l<r){if(numbers[l]+numbers[r]>target){r--;}else if(numbers[l]+numbers[r]<target){l++;}else{return new int[]{l+1,r+1};}}return new int[0];}
}

3. 三数之和

15. 三数之和
剑指 Offer II 007. 数组中和为 0 的三个数

  • 将时间复杂度降到O(n2);
class Solution {// 排序+双指针// a+b+c=0  ---> a=-(b+c)public List<List<Integer>> threeSum(int[] nums) {// 排序保证重复元素连续Arrays.sort(nums);List<List<Integer>> ans=new ArrayList<>();int n=nums.length;int a=0;  // 确定第一个数while(a<n){// 分别确定第二、三个数int c=n-1;int b=a+1;while(b<n){while(c>b&&(-nums[a]<nums[b]+nums[c])){c--;}if(c==b){break;}if(-nums[a]==nums[b]+nums[c]){  // a+b+c=0  可行解List<Integer> cur=new ArrayList<>();cur.add(nums[a]);cur.add(nums[b]);cur.add(nums[c]);ans.add(cur);}// 找到下一个与b不重复的元素int d=b+1;while(d<n&&nums[d]==nums[b]){d++;}b=d;}// 找到下一个与a不重复的元素int e=a+1;while(e<n&&nums[e]==nums[a]){e++;}a=e;}return ans;}
}
class Solution {// 排序+双指针// a+b+c=0  ---> a=-(b+c)public List<List<Integer>> threeSum(int[] nums) {// 排序保证重复元素连续Arrays.sort(nums);List<List<Integer>> ans=new ArrayList<>();int n=nums.length;int a=0;  // 确定第一个数while(a<n){// 找到下一个与a不重复的元素if(a==0||nums[a]!=nums[a-1]){// 确定第二个数int b=a+1;int c=n-1;while(b<n){// 找到下一个与b不重复的元素if(b==a+1||nums[b]!=nums[b-1]){// 确定第三个数while(c>b&&(nums[a]+nums[b]>-nums[c])){c--;}if(c==b){break;}if(nums[a]+nums[b]==-nums[c]){  // a+b+c=0  可行解List<Integer> cur=new ArrayList<>();cur.add(nums[a]);cur.add(nums[b]);cur.add(nums[c]);ans.add(cur);}}b++;}}a++;}return ans;}
}

4. 四数之和

18. 四数之和

  • 将时间复杂度降到O(n3);
class Solution {// 排序+双指针public List<List<Integer>> fourSum(int[] nums, int target) {Arrays.sort(nums);List<List<Integer>> ans=new ArrayList<>();int n=nums.length;// 第一个数int a=0;while(a<n){if(a==0||(nums[a]!=nums[a-1])){// 第二个数int b=a+1;while(b<n){if(b==a+1||(nums[b]!=nums[b-1])){// 第三个数int c=b+1;// 第四个数int d=n-1;while(c<n){if(c==b+1||(nums[c]!=nums[c-1])){long sum=nums[a]+nums[b]+nums[c]-target;// 第四个数while(d>c&&((long)nums[a]+nums[b]+nums[c]+nums[d]>target)){d--;}if(d==c){break;}// 可行解if((long)nums[a]+nums[b]+nums[c]+nums[d]==target){List<Integer> cur=new ArrayList<>();cur.add(nums[a]);cur.add(nums[b]);cur.add(nums[c]);cur.add(nums[d]);ans.add(cur);}}c++;}}b++;}}a++;}return ans;}
}

相关文章:

双指针解决n数之和问题

1. 两数之和 1. 两数之和 将时间复杂度降到O(n)&#xff1b; class Solution {// 双指针public int[] twoSum(int[] nums, int target) {int nnums.length;int l0;while(l<n){int rn-1;// 找到第一个可能nums[l]nums[r]target的位置while(r>l){if(nums[l]nums[r]targe…...

安全学习DAY07_其他协议抓包技术

协议抓包技术-全局-APP&小程序&PC应用 抓包工具-Wireshark&科来分析&封包 TCPDump&#xff1a; 是可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来帮助你去掉无用…...

electron的electron-packager打包运行和electron-builder生产安装包过程,学透 Electron 自定义 Dock 图标

electron的electron-packager打包运行和electron-builder生产安装包过程 开发electron客户端程序&#xff0c;打包是绕不开的问题。 macOS 应用构建&#xff0c;看似近在咫尺&#xff0c;实则坑坑致命。 场景&#xff1a;mac笔记本打包&#xff0c;以及生产出可交付的软件安装…...

【无标题】深圳卫视专访行云创新马洪喜:拥抱AI与云原生,深耕云智一体化创新

人工智能&#xff08;AI&#xff09;是引领新一轮科技革命和产业变革的重要驱动力。因此&#xff0c;深圳出台相关行动方案&#xff0c;统筹设立规模1,000亿元的人工智能基金群&#xff0c;引导产业集聚培育企业梯队&#xff0c;积极打造国家新一代人工智能创新发展试验区和国家…...

jenkins通过流水线进行构建jar包

前言 最近项目上需要进行CICD,本篇博客主要分享各种骚操作 目录 前言操作如下:构建触发器测试哈哈操作如下: 1.下载Jenkins.war包上传到服务器上面,然后在同级目录下面创建如下脚本: #!/bin/bash# Jenkins安装目录 JENKINS_HOME=/usr/local/jenkins# Jenkins日志文件 LO…...

Android开发:通过Tesseract第三方库实现OCR

一、引言 什么是OCR&#xff1f;OCR(Optical Character Recognition&#xff0c;光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定其形状&#xff0c;然后用字符识别方法将形状翻译成计算机文字的过程。简单地说&#…...

合并两个有序链表——力扣21

题目描述 法一 递归 class Solution { public:ListNode* mergeTwoLists(ListNode *l1, ListNode*l2){if(l1 nullptr){return l2;} else if (l2nullptr){return l1;} else if (l1->val<l2->val){l1->next mergeTwoLists(l1->next, l2);return l1;} else {l2-&g…...

企业数据,大语言模型和矢量数据库

随着ChatGPT的推出&#xff0c;通用人工智能的时代缓缓拉开序幕。我们第一次看到市场在追求人工智能开发者&#xff0c;而不是以往的开发者寻找市场。每一个企业都有大量的数据&#xff0c;私有的用户数据&#xff0c;自己积累的行业数据&#xff0c;产品数据&#xff0c;生产线…...

LabVIEW使用支持向量机对脑磁共振成像进行图像分类

LabVIEW使用支持向量机对脑磁共振成像进行图像分类 医学成像是用于创建人体解剖学图像以进行临床研究、诊断和治疗的技术和过程。它现在是医疗技术发展最快的领域之一。通常用于获得医学图像的方式是X射线&#xff0c;计算机断层扫描&#xff08;CT&#xff09;&#xff0c;磁…...

kafka面试题

kafka基本概念 Producer 生产者&#xff1a;负责将消息发送到 BrokerConsumer 消费者&#xff1a;从 Broker 接收消息Consumer Group 消费者组&#xff1a;由多个 Consumer 组成。消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费&am…...

树的遍历(一题直接理解中序、后序、层序遍历,以及树的存储)

题目如下&#xff1a; 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;请你输出它的层序遍历。 输入格式 第一行包含整数 N&#xff0c;表示二叉树的节点数。 第二行包含 N 个整数&#xff0c;表示二叉树的后序遍历。 第…...

JVM系统优化实践(22):GC生产环境案例(五)

您好&#xff0c;这里是「码农镖局」CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 除了Tomcat、Jetty&#xff0c;另一个常见的可能出现OOM的地方就是微服务架构下的一次RPC调用过程中。笔者曾经经历过的一次OOM就是基于Thrift框架封装出来的一个RPC框架导…...

DevOps系列文章 之GitLabCI模板库的流水线

目录结构&#xff0c;jobs目录用于存放作业模板。templates目录用于存放流水线模板。这次使用​​default-pipeline.yml​​作为所有作业的基础模板。 作业模板 作业分为Build、test、codeanalysis、artifactory、deploy部分&#xff0c;在每个作业中配置了rules功能开关&…...

spring扩展点ApplicationContextAware解释

ApplicationContextAware是Spring框架中的一个扩展接口&#xff0c;用于获取和操作应用程序上下文&#xff08;ApplicationContext&#xff09;。通过实现ApplicationContextAware接口&#xff0c;可以在Bean中获取对应用程序上下文的引用&#xff0c;并进行进一步的操作。 具…...

力扣热门100题之最大子数组和【中等】【动态规划】

题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&a…...

导出为PDF加封面且分页处理dom元素分割

文章目录 正常展示页面导出后效果代码 正常展示页面 导出后效果 代码 组件内 <template><div><div><div class"content" id"content" style"padding: 0px 20px"><div class"item"><divstyle"…...

【C++入门】浅谈类、对象和 this 指针

文章目录 一、前言二、类1. 基本概念2. 类的封装3. 使用习惯成员函数定义习惯成员变量命名习惯 三、对象1. 基本概念2. 类对象的存储规则 四、this 指针1. 基本概念2. 注意事项3. 经典习题4. 常见面试题 一、前言 在 C 语言中&#xff0c;我们用结构体来描述一个事物的多种属性…...

【Linux命令200例】indent对C语言代码进行缩进和格式化

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…...

Hive 调优集锦(1)

一、前言 1.1 概念 Hive 依赖于 HDFS 存储数据&#xff0c;Hive 将 HQL 转换成 MapReduce 执行&#xff0c;所以说 Hive 是基于Hadoop 的一个数据仓库工具&#xff0c;实质就是一款基于 HDFS 的 MapReduce 计算框架&#xff0c;对存储在HDFS 中的数据进行分析和管理。 1.2 架…...

【C++详解】——智能指针

目录 为什么需要智能指针 抛异常引发内存泄漏 内存泄漏 什么是内存泄漏&#xff0c;内存泄漏的危害 内存泄漏分类 检测内存泄漏常用工具 如何避免内存泄漏 智能指针的使用及原理 RAII 智能指针的原理 各类智能指针介绍 auto_ptr unique_ptr shared_ptr weak_ptr …...

Jmeter接口/性能测试,Jmeter使用教程(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、线程组 线程组…...

59,综合案例-演讲比赛流程管理系统

演讲比赛流程管理系统 59.1案例描述59.1.1比赛规则59.1.2程序功能 59.2创建管理类59.3菜单功能59.3.1添加成员函数59.3.2菜单功能实现 59.4退出功能59.4.1提供功能接口59.4.2实现退出功能 59.5演讲比赛功能59.5.1创建选手类59.5.2比赛59.5.2.1成员属性添加59.5.2.2初始化属性59…...

前端JS 展示上传图片缩略图(本地图片读取)

需求&#xff1a; 点击上传图片按钮&#xff0c;选择图片以后&#xff0c;不请求后端接口&#xff0c;直接将图片展示在缩略图中。 解决方案&#xff1a; 使用 FileReader 和 FileReader 中的 readAsDataURL 方法。 第一步 从input[type“file”] (上传文件标签) 里面拿到fil…...

Vue中$route和$router的区别

$router&#xff1a;用来操作路由&#xff0c;$route&#xff1a;用来获取路由信息 $router其实就是VueRouer的实例&#xff0c;对象包括了vue-router使用的实例方法&#xff0c;还有实例属性&#xff0c;我们可以理解为$router有一个设置的含义&#xff0c;比如设置当前的跳转…...

基于多任务学习卷积神经网络的皮肤损伤联合分割与分类

文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network 摘要 在…...

串口环形缓冲区

文章目录 一、串口环形缓冲区概念二、STC12例程&#xff08;1&#xff09;环形串口缓冲区结构体&#xff08;2&#xff09;串口环形缓冲区存和取数据&#xff08;3&#xff09;完整工程demo 一、串口环形缓冲区概念 串口环形缓冲区应用于嵌入式、物联网开发中处理接收串口数据…...

【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio完成简易通讯录

目录 &#x1f506;Cloud Studio 简介 操作步骤 1.登录 2.创建工作空间 3.初始界面 4.开发空间 5.保存自定义模板 &#x1f506;简易通讯录 1.实验要求 2.操作环境 3.源代码介绍 3.1 定义通讯录类 3.2 定义通讯录列表 3.3 添加联系人功能 3.4 修改联系人 3.5 …...

【技术积累】Vue.js中的核心知识

Vue的生命周期 Vue中的生命周期是指组件从创建到销毁的整个过程中&#xff0c;会触发一系列的钩子函数 Vue2中的生命周期 Vue2中的生命周期钩子函数是在组件的不同阶段执行的特定函数。这些钩子函数允许开发者在组件的不同生命周期阶段执行自定义的逻辑。 Vue2中的生命周期钩…...

flutter开发实战-显示本地图片网络图片及缓存目录图片

flutter开发实战-显示本地图片网络图片及缓存目录图片 在最近开发中碰到了需要显示缓存目录图片&#xff0c;这里顺便整理一下&#xff0c;显示本地图片、网络图片、缓存目录图片的方法。 一、工程本地图片显示 1 在项目根目录下创建名为 images文件夹&#xff0c;也可以将i…...

面对未来的算法备案法规:企业需要做哪些准备?

在信息时代&#xff0c;算法已经成为我们生活的一部分&#xff0c;涵盖了诸如搜索引擎、社交媒体、电子商务、广告投放等各个方面。然而&#xff0c;随着算法的广泛应用&#xff0c;其带来的问题也日益凸显。这引发了全球范围内的关注&#xff0c;未来的算法备案法规正在酝酿之…...