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

网站关键词排名没有了澄海网站建设公司

网站关键词排名没有了,澄海网站建设公司,南通网页设计培训,官网建站模板库一、原题 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。…

一、原题

给你一个整数数组 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 。

二、心得

        这题我的第一反应就是三个 for() 循环,依次向后遍历,找到符合的三元解,并将它们存入列表中并返回结果。可这样一来,感觉挺怪的,说不出的感觉~

        于是乎,我参考了一下他人的解法,当我看到 Arrays.sort(nums); 时,灵光乍现,一个新的思路从我脑海中闪过,直接用下图来解释我的思路:

        于是乎,有了下面的代码(看注释能看懂的~):

class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums); // 思考一下:为什么要排序?List<List<Integer>> a = new ArrayList<List<Integer>>(); // 创建返回值——一个包含列表的列表// 三元数的第一个数的指针指向数组的开始,即nums[0],向后遍历nums[i]for(int i = 0; i < nums.length; i ++){// 向后遍历的过程中,若遇到相同的数字,则循环下一次,跳过当前的循环,否则,继续执行if(i > 0 && nums[i] == nums[i - 1]){continue;}// 三元数的第三个数的指针指向数组的末端,即nums[nums.length - 1],向前遍历nums[j]int j = nums.length - 1;// 三元数的第二个数的指针指向数组的 nums[i + 1],向后遍历nums[k],保持第二个数始终在第一个数后面for(int k = i + 1; k < nums.length; k ++){// 向后遍历的过程中,若遇到相同的数字,则循环下一次,跳过当前的循环,否则,继续执行if(k > i + 1 && nums[k] == nums[k - 1]){continue;}// 如果当前的三个数相加大于0,说明正数 nums[j] 过于大了(好好想想),则第三个数应该向前遍历while(k < j && nums[i] + nums[k] + nums[j] > 0){j --;}// 如果第三个数向前遍历都与第二个数重合了,则跳出当前的循环if(k == j){break;}// 如果当前的三个数相加等于0,则找到了一组三元解,将满足条件的三元数组存入结果的列表中if(nums[i] + nums[k] + nums[j] == 0){List<Integer> list = new ArrayList<Integer>();list.add(nums[i]);list.add(nums[k]);list.add(nums[j]);a.add(list);}}}return a;}
}

        这里解答一下为什么要排序:因为从小到大排序,可以肯定的是(这里首先把 [0, 0, 0] 的情况排除掉),nums[0] 一定为负,nums[nums.length - 1]一定为正,这样有利于我们去判断三者相加的情况,即对应代码中的 nums[i] + nums[k] + nums[j] > 0 (看看注释~)。

        这样一下来,时间复杂度就从连续三重 for() 的 O(n^{3}),降为了O(n^{2}),也算是节约了计算机的资源了噻~

http://www.yayakq.cn/news/857595/

相关文章:

  • 公司网站过期未续费会怎样seo引擎优化培训
  • 网站建设的一般过程包括哪些方面wordpress是指什么系统
  • 网站开发公司网站模板曹县做网站
  • 个人简历模板网站excel可以做网站吗
  • 网站建设需要的东西网络组建与配置 2018版清华大学出版社
  • 上海市建设工程质监站网站云游戏网页版
  • 深圳市住房和建设局网站广西城乡和建设厅网站首页
  • 常德网站建设策划方案百度极速版免费下载
  • 中企动力网站建设 医疗ui设计培训机构怎么样
  • wordpress搜索栏宁波seo免费优化软件
  • 苏州网页制作与网站建设地址股票app开发价格
  • 小马厂网站建设临泉县建设局网站
  • 哪里做网站做的好造价咨询公司加盟分公司
  • 室内设计联盟邀请码怎么获得手机优化如何弄到100
  • 上海网站建设要多少钱网站移动端是什么情况
  • Spring做网站和什么网页设计尺寸详解
  • 建立网站的步骤是什么dede 网站打开自动加html
  • 网站开发和药品网络营销公司
  • 电子商务网站建设的背景网站设计成品
  • 企业官方网站地址怎么填设计logo的软件推荐
  • 北京建设质量协会网站ipad 设计网站
  • 网站模板 jsp长春优化
  • 网站开发用什么开发网站地图是怎么做的
  • 江苏建设厅老网站搜索引擎排名优化公司
  • 网站功能建设中页面网站开发软硬件条件
  • 免费的小程序模板网站图片seo优化是什么意思
  • 网站营销网站建设企业黄页大全
  • 商务网站需求分析非洲跨境电商平台有哪些
  • 高校校园网站建设广告制作公司需要哪些设备
  • 新鸿儒网站江山集团网站建设