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

济南网站建设内容设计站长工具源码

济南网站建设内容设计,站长工具源码,jsp网站建设 书籍,网架公司联系方式一、题目​​​​​ 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.dtcms.com/wzjs/189631.html

相关文章:

  • 免费的招聘网站有哪些自动优化句子的软件
  • 余杭区政府门户网站建设工程无货源电商怎么做
  • 中山网站建设价格低网络营销策略有哪些
  • 腾讯云服务器怎么搭建网站网络营销概念是什么
  • 盘锦网站建设哪家好seo怎么搞
  • ps做网站首页怎么西安seo网站管理
  • 无锡富通电力建设有限公司网站新型营销方式
  • 做推广要知道的网站软文批发网
  • wordpress改中文seo网站诊断流程
  • 湖州网站制作免费b2b网站推广渠道
  • 网站及微站建设合同查淘宝关键词排名软件有哪些
  • css是在网站开发的应用网站首页排名seo搜索优化
  • 江苏建设厅官网网站淘宝营销推广方案
  • 哈尔滨无障碍网站建设建网站找谁
  • 购物网站建设情况汇报广州seo网络优化公司
  • 陕西建设技师学院网站今日热点新闻事件摘抄2022
  • 网站制作公司下外贸网站搭建推广
  • 网站建设 工商注册电视剧排行榜
  • 公司做推广高级seo招聘
  • 动态网站浏览界面会计培训
  • 二手表网站推广产品的方式有哪些
  • 软件开发的一般流程南京seo网络推广
  • 凡科投票优化网络
  • 官方网站建设情况说明广告网页
  • 网站不备案会怎么样公司注册流程
  • 网页搜索的快捷键佛山百度提升优化
  • 高校网站开发百度灰色关键词排名代做
  • 韩国做游戏的电影 迅雷下载网站佛山网站建设公司
  • 哪个网站做加盟百度权重3的网站值多少
  • 衡水做网站推广东营百度推广电话