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

有关性的网站网站 png

有关性的网站,网站 png,wordpress 数据库函数大全,毕设网站开发需要做什么15. 三数之和 1. 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以…

15. 三数之和

1. 题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:

  • 3 <= nums.length <= 3000
  • -10^5 <= nums[i] <= 10^5

2. 思路分析

  1. 暴力法:三重循环,时间复杂度为O(n^3),会超时,且去重麻烦
  2. 双指针法:先排序,然后固定一个数,再用双指针在固定数之后的区间寻找两个数,使得三数之和为0

排序的好处:

  • 方便去重:相同的元素相邻,可以跳过重复元素避免重复解
  • 双指针可以高效地寻找两数之和

具体步骤:

  • 排序数组:首先对数组进行排序。排序后,相同的元素会相邻,这有助于后续跳过重复元素,避免重复的三元组。同时,排序使得我们可以使用双指针技巧高效地搜索三元组。
  • 固定一个元素,使用双指针搜索:遍历数组,对于每个元素nums[i],使用双指针在 i+1 到数组末尾的区间内搜索两个元素 nums[left] 和 nums[right],使得三数之和为0。
    • 双指针移动策略:
      • 如果三数之和等于0,记录三元组,并移动左右指针跳过重复元素。
      • 如果和小于0,左指针右移(增加和)
      • 如果和大于0,右指针左移(减少和)
    • 跳过重复元素:在移动指针时,跳过重复值,确保不会生成重复的三元组。
  • 跳过重复的固定元素:在遍历数组时,如果当前元素与前一个元素相同,则跳过,避免重复处理相同的三元组。

3. 解题过程

  1. 排序数组:使用Arrays.sort()对数组进行升序排序
  2. 初始化结果列表:用于存储所有满足条件的三元组
  3. 遍历数组:外层循环遍历每个元素nums[i]
  4. 跳过重复的nums[i]:如果当前元素与前一个元素相同,则跳过
  5. 双指针搜索:初始化左指针 left = i + 1 和右指针 right = nums.length - 1
    1. 计算三数之和 sum = nums[i] + nums[left] + nums[right]
    2. 根据sum的值移动指针:
      1. 如果sum == 0,记录三元组,移动左右指针并跳过重复元素。
      2. 如果sum < 0,左指针右移并跳过重复元素。
      3. 如果sum > 0,右指针左移并跳过重复元素。
  6. 返回结果:所有满足条件的三元组

程序代码

class Solution {public List<List<Integer>> threeSum(int[] nums) {// 排序数组Arrays.sort(nums);// 结果列表List<List<Integer>> result = new ArrayList<>();for (int i = 0; i < nums.length; i++) {// 跳过重复的固定元素if (i > 0 && nums[i] == nums[i - 1]) {continue;}// 初始化左右指针int left = i + 1;int right = nums.length - 1;while(left < right){int sum = nums[i] + nums[left] + nums[right];if(sum == 0){// 找到有效三元组result.add(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 < 0){// 左指针右移left++;// 跳过重复的左指针元素while(left < right && nums[left] == nums[left - 1]){left++;}} else if(sum > 0){// 右指针左移right--;// 跳过重复的右指针元素while(left < right && nums[right] == nums[right + 1]){right--;}}} }return result;}
}
  • 排序:通过排序,相同元素相邻,便于后续跳过重复元素。

  • 外层循环:遍历每个元素作为固定元素,跳过重复值以避免重复三元组。

  • 双指针:左指针从 i+1 开始,右指针从数组末尾开始,根据三数之和调整指针位置。

  • 跳过重复元素

    • 在找到有效三元组后,移动左右指针并跳过重复值。

    • 在移动左指针(和小于0时)或右指针(和大于0时)时,同样跳过重复值。

  • 时间复杂度:排序 O(n log n),双指针搜索 O(n^2),总体 O(n^2)

  • 空间复杂度O(1)(不考虑存储结果的空间)。


补充

Arrays.asList() 是 Java 标准库中 java.util.Arrays 类的一个静态方法,用于将一组元素转换为固定大小的列表(List

基本用法

import java.util.Arrays;
import java.util.List;public class Main {public static void main(String[] args) {// 创建包含多个元素的列表List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");// 输出列表内容System.out.println(fruits); // [Apple, Banana, Cherry]}
}

文章转载自:

http://hGC6umVx.ppqqr.cn
http://cpkZNQ8f.ppqqr.cn
http://4aFJLvHd.ppqqr.cn
http://rFz0AvvR.ppqqr.cn
http://Xi2BY2lr.ppqqr.cn
http://I7jjgTDI.ppqqr.cn
http://CtJimpgz.ppqqr.cn
http://HWwwfhAD.ppqqr.cn
http://XdAPT0ad.ppqqr.cn
http://eWh9Z64f.ppqqr.cn
http://x6fYsDWR.ppqqr.cn
http://cZGdYV6b.ppqqr.cn
http://uilEo3Ob.ppqqr.cn
http://Csa3zeIb.ppqqr.cn
http://H1B3A7qi.ppqqr.cn
http://cZKFHRpQ.ppqqr.cn
http://vo8sHJGF.ppqqr.cn
http://LauI7ZQ0.ppqqr.cn
http://vlXn0JRS.ppqqr.cn
http://B3ZmRv4V.ppqqr.cn
http://WiZZleUC.ppqqr.cn
http://gDy9q21A.ppqqr.cn
http://4H4AGyyh.ppqqr.cn
http://20zmaMPd.ppqqr.cn
http://yv7NFPkr.ppqqr.cn
http://B0ywFBmr.ppqqr.cn
http://7RAJEwTn.ppqqr.cn
http://TChZynHx.ppqqr.cn
http://AfVGB5lP.ppqqr.cn
http://UpXEq1HU.ppqqr.cn
http://www.dtcms.com/wzjs/677417.html

相关文章:

  • 网站建设潮州家电电商平台排名
  • 德州市建设街小学官方网站商标设计在线
  • 濮阳网站开发wordpress 模板森林
  • 手机建站平台哪个好设计师接单的十个网站
  • 第一次做怎么放进去视频网站信用卡申请网站建设
  • 怎样查找自己建设的网站建设银行国际互联网站
  • 中国最受欢迎的网站做响应式网站最大宽度
  • 三明网站建设公司小程序获取wordpress背景音乐
  • 做网站6000左右的电脑邯郸去哪做网站改版
  • 怎么在别人网站上做锚文本链接如何做企业网站推广产品
  • 一般网站建设都用什么字体做销售的什么网站好
  • 做网站一般是怎么盈利南通网站建设策划
  • 海外百度云网站建设最近发生的重大新闻事件
  • 阿里云服务器上做淘宝客网站做ppt找图片的网站有哪些
  • shopify建站流程做安卓开发要去看哪些网站
  • 自学网站编程电商设计需要学什么软件有哪些
  • 国家城乡建设官方网站互联网行业发展现状
  • 亳州市建设局网站网站留言效果怎么做
  • 珠宝网站建设要以商为本做网站技术含量
  • 如何运用网站做推广关于做血糖仪的网站
  • 怎么建网站网站规划与建设实验心得体会
  • 做网站的技术要求上线了网站怎么样
  • 微信网站建设普通个人简历
  • 网站怎么加入百度网盟关于配色的网站
  • 江苏省建设厅网站培训网做效果图常用的网站有哪些软件
  • 网站美化教程下载国外源代码网站
  • 有空间站的国家爱站网seo综合查询工具
  • 哪家公司做直播间网站网站组成部分
  • 电子商务网站建设素材改则网站建设
  • 网站建设原则包括哪些内容免费推广seo