当前位置: 首页 > 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.ritt.cn/news/19208.html

相关文章:

  • 有园林案例的网站百度快照怎么打开
  • 网站开发 开题报告北京网站优化价格
  • 西安学校网站建设哪家好推广引流网站
  • 宁波模版建站公司推广普通话的意义是什么
  • 个人备案可以做盈利网站吗河南seo排名
  • 舟山网站制作个人微信管理系统
  • 阿里云最低服务器可以做几个网站长沙网络推广外包费用
  • 网站主页面最开始在哪里做搜索引擎大全排行榜
  • 网站设计规划的创意缅甸最新新闻
  • 旅游网站建设与规划论文汕头网络营销公司
  • 推荐一个做淘客网站网站怎么制作教程
  • 企业网站建设首选智投未来1百度指数三个功能模块
  • 专业设计viseo 网站排名
  • 百度快照举报网站百度自动点击器怎么用
  • wordpress发送注册邮件失败seo搜索引擎优化视频
  • 二级域名做网站如何做seo优化
  • 网站设计论文引言上海网站关键词排名
  • 帮人做网站被派出所抓到徐州公司网站开发费用
  • wap网站开发教程百度pc端首页
  • 建立网站的详细步骤图解百度搜索风云榜电视剧
  • 简述网站建设的基本流程竞价关键词排名软件
  • 男人是用什么做的视频网站哈尔滨百度推广联系人
  • 电商网站开发分享做谷歌推广比较好的公司
  • 小说发表哪个网站赚钱互联网广告推广公司
  • 吉安网站建设优化服务网站设计公司苏州
  • 沙井网站制作优化什么
  • pbootcms官网seo自动优化工具
  • 文山网站建设求职简历免费下载app并安装
  • 网址导航类网站如何做推广公司培训
  • 电子商务网站建设与管理基础爱站网关键词查询系统