图解双指针解决三数之和、最接近的三数之和

双指针解决三数之和

模板代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;/*** $15、$16的模板代码*/
class Solution {public List<List<Integer>> threeSum2(int[] nums) {int len = nums.length;List<List<Integer>> res = new ArrayList<>();//1.排序Arrays.sort(nums);//2.枚举ifor (int i = 0; i < len; i++) {//需要和上一次枚举的数不同if (i > 0 && nums[i] == nums[i-1]) {continue;}//3.确定l,r//l的初始值是i的下一个int l = i+1;//r的初始值是数组的最右端int r = len-1;int target = ;//5.当l<r时while (l < r) {int sum = 左右指针对应值或者其他相关;
//                //需要和上一次枚举的数不同
//                if (l > i+1 && nums[l] == nums[l-1]) {
//                    l++;
//                    continue;
//                }//5.1通过与target的比较,来调整l与r的位置if (sum < target) {
//                    //移动到下一个不相同的元素
//                    while (l+1 < r && nums[l] == nums[l+1]) {
//                        l++;
//                    }l++;} else if (sum > target) {
//                    //移动到下一个不相同的元素
//                    while (r-1 > l && nums[r] == nums[r-1]) {
//                        r--;
//                    }r--;} else {//结果处理}}}return res;}
}

三数之和

OJ链接

在这里插入图片描述

import java.util.*;public class $15 {//左右指针public List<List<Integer>> threeSum2(int[] nums) {int len = nums.length;List<List<Integer>> res = new ArrayList<>();//排序Arrays.sort(nums);//枚举afor (int i = 0; i < len; i++) {//需要和上一次枚举的数不同if (i > 0 && nums[i] == nums[i-1]) {continue;}//b的初始值是a的下一个int l = i+1;//c的初始值是数组的最右端int r = len-1;int target = -nums[i];while (l < r) {//需要和上一次枚举的数不同if (l > i+1 && nums[l] == nums[l-1]) {l++;continue;}if (nums[l] + nums[r] < target) {
//                    while (l+1 < r && nums[l] == nums[l+1]) {
//                        l++;
//                    }l++;} else if (nums[l] + nums[r] > target) {r--;} else {List<Integer> list = new ArrayList<>();list.add(nums[i]);list.add(nums[l]);list.add(nums[r]);res.add(list);
//                    while (l+1 < r && nums[l] == nums[l+1]) {
//                        l++;
//                    }l++;}}}return res;}
}

最接近的三数之和

OJ链接

在这里插入图片描述

import java.util.Arrays;public class $16 {public int threeSumClosest(int[] nums, int target) {int len = nums.length;//排序Arrays.sort(nums);int best = Integer.MAX_VALUE;for (int i = 0; i < len; i++) {//需要和上一次枚举的数不同if (i > 0 && nums[i] == nums[i-1]) {continue;}int l = i+1;int r = len-1;while (l < r) {int sum = nums[i] + nums[l] + nums[r];//更新差值的的绝对值来更新答案if (Math.abs(sum-target) < Math.abs(best-target)) {best = sum;}if (sum < target) {//移动到下一个不相同的元素while (l+1 < r && nums[l] == nums[l+1]) {l++;}l++;} else if (sum > target) {//移动到下一个不相同的元素while (r-1 > l && nums[r] == nums[r-1]) {r--;}r--;} else {return target;}}}return best;}
}

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

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

相关文章

Unity 如何获取当前日期的中文星期几

要获取当前日期是星期几可以使用DateTime下的DayOfWeek方法。 首先我们在脚本中添加System引用&#xff1a; using System; 然后我们再调用DateTime下的DayOfWeek方法&#xff1a; DayOfWeek dayOfWeek DateTime.Now.DayOfWeek; //获取当前是星期几 由于返回的是英文&…

Node 源项目定制化、打包并使用全过程讲解

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

财务数据智能化:用AI工具高效制作财务分析PPT报告

Step1: 文章内容提取 WPS AI 直接打开文件&#xff0c;在AI对话框里输入下面指令&#xff1a; 假设你是财务总监&#xff0c;公司考虑与茅台进行业务合作、投资或收购&#xff0c;请整合下面茅台2021年和2022年的财务报告信息。整理有关茅台财务状况和潜在投资回报的信息&…

论文阅读<CF-YOLO: Cross Fusion YOLO for Object Detection in Adverse Weather.....>

论文链接&#xff1a;https://arxiv.org/pdf/2309.08152.pdfhttps://arxiv.org/pdf/2206.01381.pdfhttps://arxiv.org/pdf/2309.08152.pdf 代码链接&#xff1a;https://github.com/DiffPrompter/diff-prompter 目前没有完整代码放出。 恶劣天气下的目标检测主要有以下三种解…

【【IIC模块Verilog实现---用IIC协议从FPGA端读取E2PROM】】

IIC模块Verilog实现–用IIC协议从FPGA端读取E2PROM 下面是 design 设计 I2C_dri.v module IIC_CONTROL #(parameter SLAVE_ADDR 7b1010000 , // E2PROM 从机地址parameter CLK_FREQ 26d50_000_000 , // 50MHz 的时钟频率parameter …

关于MULTI#STORM活动利用远程访问木马瞄准印度和美国的动态情报

一、基本内容 于2023年6月22日&#xff0c;一款代号为MULTI#STORM的新网络钓鱼活动将目标瞄准了印度和美国&#xff0c;利用JavaScript文件在受感染的系统上传播远程访问木马。 二、相关发声情况 Securonix的研究人员Den luzvyk、Tim Peck和Oleg Kolesnikov发表声明称&#x…

民富购:塑造数字时代下的电商革新与社会责任典范

在数字经济时代,电子商务已经成为建立市场关系、创新产业和服务业态、促进经济增长的重要途径和手段。特别是在中国,新型电子商务的迅猛发展已经改变了生产和生活的方方面面,不仅催生了众多新业态,还通过“互联网”战略让许多传统产业和服务焕发了新的生机。民富购,作为扬羊(广…

了解OAuth 2.0以及社交登录认证授权流程

1.前言 目前在写一个电商项目&#xff0c;可以通过手机号进行注册登录&#xff0c;为了方便用户使用本平台的系统&#xff0c;引入社交登录功能&#xff0c;这里使用的是gittee。 2.OAuth 2.0介绍 当谈到网络安全和身份验证时&#xff0c;OAuth 2.0&#xff08;开放授权 2.0&a…

8.21 PowerBI系列之DAX函数专题-帕累托分析

需求 实现 1 按商品小类累积 var rollup_sales calculate(//计算当前累计销售额 [销售额], filter(allselected(order_2[产品小类]),sum(order_2[订单金额])<[销售额]) ) //按小类累积金额,filter内的销售额为选中的各小类的销售额 //金额从大到小累积&#xff0c;用&l…

《我在北京送快递》平凡隽永的时刻,对人生更具意义

《我在北京送快递》平凡隽永的时刻&#xff0c;对人生更具意义 胡安焉 文章目录 《我在北京送快递》平凡隽永的时刻&#xff0c;对人生更具意义[toc]摘录感悟 摘录 转“没有期限的承诺无疑就是委婉的拒绝” 转书友&#xff1a;亨利福特说&#xff0c;我聘的是一双手&#xff0…

C语言操作符if语句好习惯 详解分析操作符(详解4)

各位少年&#xff1a; 前言 还记得我们上一章讲过一个比较抽象的代码&#xff0c;它要比较两次都是真的情况下才能打印&#xff0c;那么很显然这样写代码是有弊端的&#xff1f;哪我们C语言之父丹尼斯.里奇&#xff0c;先介绍一下上次拉掉了if语句的好习惯 好再分享一些操作符…

Autosar CAN开发02(入门Autosar)

Autosar架构 想起当时刚毕业进入公司之后&#xff0c;我的岗位是Autosar Bsw软件工程师。 看着这个什么“Autosar”&#xff0c;真的是一脸懵。 后来才知道&#xff0c;按照我的理解&#xff1a;Autosar就是一个软件架构。它分为ASW和BSW。ASW负责实现应用层功能&#xff08…