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

中国建工社微课程官网/无锡seo培训

中国建工社微课程官网,无锡seo培训,外贸网站建设公司机构,石家庄网站快速备案一、题目​​​​​ 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足: i!j、i!k 且 j! k ,同时还满足:nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意…

一、题目​​​​​

15. 三数之和

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

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

二、思路

1. 我们要返回的是“所有和为0且不重复的三元组”,这是一个数组类型,数组里的每一个元素都是三元组;

2. 要有三个用于遍历的指针;

3. 判断条件就两个:

  • i!=ji!=k 且 j!= k 
  • nums[i] + nums[j] + nums[k] == 0、

4. 如果直接遍历,重复次数太多了,如何解决?

【联想到“两数之和Ⅱ”的那道题,因为有了一个“非严格递增”的顺序条件,我们得以简化遍历的过程;在这里也可以借鉴这个思路——创造一个顺序出来】

该题题解见如下文章:
【附JS、Python、C++题解】Leetcode面试150题(7)-CSDN博客

三、代码

① JavaScript

function threeNums(nums){nums.sort((a,b)->a-b);let res = [];let l = nums.length;for(let i = 0; i<l-2; i++){if(i>0 && nums[i]===nums[i-1]){continue;}let j = i+1;let k = l-1;while(j<k){const sum = nums[i] + nums[j] + nums[k];if(sum === 0){res.push([nums[i], nums[j], nums[k]]);while(j<k && nums[j] === nums[j+1]){j++;}while(j<k && nums[k] === nums[k-1]){k--;}j++;i--;}else if(sum<0){j++;}else{K--;}}}return res;
}

② Python

def three_sum(nums):nums.sort()  # 先对数组进行排序res = []length = len(nums)for i in range(length - 2):if i > 0 and nums[i] == nums[i - 1]:continuej, k = i + 1, length - 1while j < k:total = nums[i] + nums[j] + nums[k]if total == 0:res.append([nums[i], nums[j], nums[k]])# 避免重复计算while j < k and nums[j] == nums[j + 1]:j += 1while j < k and nums[k] == nums[k - 1]:k -= 1j += 1k -= 1elif total < 0:j += 1else:k -= 1return res

③ C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;int length = nums.size();// 先对数组进行排序sort(nums.begin(), nums.end());for (int i = 0; i < length - 2; ++i) {if (i > 0 && nums[i] == nums[i - 1]) {continue;}int j = i + 1;int k = length - 1;while (j < k) {int total = nums[i] + nums[j] + nums[k];if (total == 0) {res.push_back({nums[i], nums[j], nums[k]});// 避免重复计算while (j < k && nums[j] == nums[j + 1]) {++j;}while (j < k && nums[k] == nums[k - 1]) {--k;}++j;--k;} else if (total < 0) {++j;} else {--k;}}}return res;
}

四、反思

这道题自己做的时候并没有先进行排序,导致重复的次数很多。下次遇到遍历很复杂的问题,要先进行处理!!

http://www.whsansanxincailiao.cn/news/31946520.html

相关文章:

  • 网站开发前端培训/百度竞价关键词价格查询工具
  • 网站建设功能/哪些网站推广不收费
  • 重庆做网站建设哪家好/网络运营策划
  • 商贸公司网站建设方案/管理培训班
  • ssm网站开发源代码/北京aso优化
  • 网站主机域名/乐陵seo外包公司
  • 多图片网站优化/淘宝搜索词排名查询
  • 汽车网站网页设计/网络平台营销
  • 建设银行亚洲官方网站/创建一个网站
  • wordpress app 开发/网站seo工具
  • 定制网站哪家好/长沙专业网站制作
  • 哪些网站做的比较好的/青岛网站建设培训学校
  • 15个国内互动网站设计欣赏/百度seo排名点击器app
  • 广西住房和城乡建设部网站/软文代写是什么
  • 网站建设软著/搜索引擎的工作原理有哪些
  • 番禺网站开发公司/潍坊今日头条新闻
  • 网站建设无广告/seo招聘职责
  • 制作一个门户网站需要多少钱/百度2023免费
  • 怎样网络营销推广/百度移动端优化
  • 美发培训网站/网站设计与制作
  • 传媒公司 网站开发/百度提交网站的入口地址
  • 运动分类的网站设计论文/北京昨天出啥大事了
  • 日照网站建设网站/seo全网营销
  • 卢湾品牌网站建设/seo品牌推广方法
  • 做软件与做网站建设有什么区别/宁波seo网络推广软件系统
  • 网页版面/东莞seo托管
  • 站长工具国产2023/推一手新闻发稿平台
  • 2o17甘孜建设网站/宁波seo推广定制
  • 乌鲁木齐市建设委员会网站/网络推广网站排行榜
  • 重庆市场调研公司/上海百网优seo优化公司