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

7.《双指针篇》---⑦三数之和(中等偏难)

题目传送门 

方法一:双指针

1.新建一个顺序表用来返回结果。并排序数组。

2.for循环 i 从第一个数组元素遍历到倒数第三个数。

3.如果遍历过程中有值大于0的则break; 

4.定义左右指针,以及target。int left = i + 1, right = n - 1; int target = -nums[i];

5.类似两数之和。比较int sum = nums[l] + nums[r] 与 target的大小

注意:

1.不能返回重复的数组。因此我们还需要排除重复的。

2.排序之后。在sum = target的时候。我们进行 left 和 right的排重。

3.在 i++ 之后我们进行 num[i] 这个元素的排重。

注意:

排重的时候双指针排重记得 left < right。并且num【i】排重的时候注意 i<n-1。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ret = new ArrayList<>();Arrays.sort(nums);int n = nums.length-1;for(int i = 0; i < n-1; ){if(nums[i] > 0){break;}int left = i + 1;int right = n;int target = -nums[i];while(left < right){int sum = nums[left] + nums[right];if(sum == target){ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));left++;right--;while(left < right && nums[left] == nums[left-1]){left++;}while(left < right && nums[right] == nums[right+1]){right--;}}else if(sum < target){left++;}else{right--;}}i++;while(i<n-1 && nums[i] == nums[i-1]){i++;}}return ret;}
}

 复杂度分析

http://www.lryc.cn/news/480585.html

相关文章:

  • 鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)
  • mybatis连接PGSQL中对于json和jsonb的处理
  • Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化
  • 内网学习一:windows基础
  • 编译工具与文件学习(一)-YAML、repos、vcstoolcolcon
  • 使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • [极客大挑战 2019]PHP 1
  • 【c++丨STL】vector模拟实现
  • SQLAlchemy 介绍与实践
  • docker进行SRS直播服务器搭建
  • windows server2019下载docker拉取redis等镜像并运行项目
  • 数据结构(8.7_2)——败者树
  • 设计模式-七个基本原则之一-里氏替换原则
  • k8s中基于overlay网络和underlay网络的网络插件分别有哪些
  • 一文详解java的数据类型
  • Flink API 的层次结构
  • lua入门教程:math
  • ROS2简介与Ubuntu24.04中安装指南
  • 命令行工具PowerShell使用体验
  • MongoDB 详解:深入理解与探索
  • 使用 Elasticsearch 构建食谱搜索(一)
  • sealos部署K8s,安装docker时master节点突然NotReady
  • 使用vite+react+ts+Ant Design开发后台管理项目(五)
  • Spring Boot实现多数据源连接和切换
  • 发布 VectorTraits v3.0(支持 X86架构的Avx512系列指令集,支持 Wasm架构及PackedSimd指令集等)
  • 详解如何创建SpringBoot项目
  • IT架构管理
  • Feign入门实践
  • Leetcode 买卖股票的最佳时机 Ⅱ