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

leetcode 热题 100_三数之和

题解一:

        双指针遍历:暴力解法的三层遍历会超时,因此需要优化遍历的过程。首先是需要对结果进行去重,这里采用排序+跳过重复值的做法,在指针遍历时跳过已经遍历过的相同值。在第一层循环确定第一个值后,剩下两个符合要求的值一定是在其后相继出现的,因此可以用双指针从两侧逼近寻找符合的值,下面附上官方提供的伪代码(来源. - 力扣(LeetCode))

nums.sort()
for first = 0 .. n-1if first == 0 or nums[first] != nums[first-1] then// 第三重循环对应的指针third = n-1for second = first+1 .. n-1if second == first+1 or nums[second] != nums[second-1] then// 向左移动指针,直到 a+b+c 不大于 0while nums[first]+nums[second]+nums[third] > 0third = third-1// 判断是否有 a+b+c==0check(first, second, third)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> lists = new ArrayList<>();Arrays.sort(nums);int len = nums.length;for (int i = 0; i < len; i++) {if (i == 0 || nums[i] > nums[i - 1]) {int right = len - 1;for (int left = i + 1; left < right; left++) {if (left == i + 1 || nums[left] > nums[left - 1]) {while (right > left + 1 && nums[left] + nums[right] + nums[i] > 0) {right--;}if (nums[left] + nums[right] + nums[i] == 0) {List<Integer> list = new ArrayList<>();list.add(nums[i]);list.add(nums[left]);list.add(nums[right]);lists.add(list);}}}}}return lists;}
}

相关文章:

  • LeetCode——二叉树(Java)
  • 【Vue3】PostCss 适配
  • GO基本类型一些记录
  • Spring八股 常见面试题
  • 爆红提醒:ESLint: Parsing error: Unexpected token. Did you mean `{‘>‘}` or `gt;`?
  • Java如何添加批量添加水印
  • 【vue3】命令式组件封装,message封装示例;(函数式组件?)
  • 监听者的力量:探索观察者模式和spring使用
  • [NOIP2007 普及组] 纪念品分组--贪心算法
  • 论文里点击如图?-?如何跳转到图片的题注
  • 探秘SpringBoot启动流程:原理解析与自定义扩展
  • Mongodb基础(node.js版)
  • C2_W2_Assignment_吴恩达_中英_Pytorch
  • 【简略知识】项目开发中,VO,BO,PO,DO,DTO究竟是何方妖怪?
  • 腾讯云幻兽帕鲁服务器如何安全下载WorldOption.sav文件?
  • 【mysql】环境安装、服务启动、密码设置
  • 【技术性】Search知识
  • android 一些 utils
  • CSS居中完全指南——构建CSS居中决策树
  • DataBase in Android
  • dva中组件的懒加载
  • export和import的用法总结
  • mongo索引构建
  • SQL 难点解决:记录的引用
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 构造函数(constructor)与原型链(prototype)关系
  • 前言-如何学习区块链
  • 小而合理的前端理论:rscss和rsjs
  • Mac 上flink的安装与启动
  • NLPIR智能语义技术让大数据挖掘更简单
  • 关于Android全面屏虚拟导航栏的适配总结
  • (floyd+补集) poj 3275
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (算法)N皇后问题
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原)本想说脏话,奈何已放下
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • .Mobi域名介绍
  • .Net CF下精确的计时器
  • .Net Core 中间件验签
  • .net 受管制代码
  • .Net 应用中使用dot trace进行性能诊断
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • @AliasFor注解
  • [Android]Android开发入门之HelloWorld
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [hdu 1247]Hat’s Words [Trie 图]
  • [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明
  • [IOI2007 D1T1]Miners 矿工配餐
  • [JavaScript]_[初级]_[关于forin或for...in循环语句的用法]