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

编程跟做网站/正规的微信推广平台

编程跟做网站,正规的微信推广平台,网站设计与开发培训,网站制作的内容什么好目录题目思路题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例&…

目录

  • 题目
  • 思路

题目

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

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

示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[[-1, 0, 1],[-1, -1, 2]
]

思路

leetcode清晰思路
leetcode代码交流

时间复杂度O(N^2), 空间复杂度O(1)

1. 先对数组排序,便于判断重复元素O(NlogN)

2. 一层遍历O(N):对于每一个nums[i],在[i+1,n-1]范围内找出包含自己的不重复的三元组。

  • 具体来说,就是双指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集。
  • 如果不满足,就根据sum比0大还是比0小,来判断左指针右移还是右指针左移。这个过程是O(N)。
  • 所以总的来说时间复杂度O(N^2)。

3. 遍历过程中为了保证三元组的唯一性,在找到一组合适的三元组后,对于重复值,要加快指针的移动:

  • (1)nums[i]如果和nums[i-1]相等,则忽略;
  • (2)sum为0时,如果nums[L]==nums[L+1],则后面的都要跳过;
  • (3)sum为0时,如果nums[R]==nums[R-1],则后面的都要跳过。

4. 为了优化遍历,当 nums[i]大于 0,则三数之和必然大于 0,可以直接结束循环

class Solution {
public:
/*
错误超时思路:两层循环遍历数组,将两两组合放入哈希表中,key为两数之和,value为二维数组,里面放的都是和为key的序号对;再来一次遍历数组,寻求刚好满足的第三者。需要注意的是,把符合条件的三元组放进vector中,然后在去去重,这样是非常费时的,很容易超时。
时间复杂度O(N^2),空间复杂度O(N)。
*/
/*
换一种思路。
1、先对数组排序,便于判断重复元素O(NlogN)
2、一层遍历O(N):对于每一个nums[i],在[i+1,n-1]范围内找出包含自己的不重复的三元组。
具体来说,就是双指针指向 nums[i]后面的两端,数字分别为 nums[L] 和 nums[R],计算三个数的和 sum 判断是否满足为 0,满足则添加进结果集。如果不满足,就根据sum比0大还是比0小,来判断左指针右移还是右指针左移。这个过程是O(N)。所以总的来说时间复杂度O(N^2)。
3、遍历过程中为了保证三元组的唯一性,在找到一组合适的三元组后,对于重复值,要加快指针的移动:(1)nums[i]如果和nums[i-1]相等,则忽略;(2)sum为0时,如果nums[L]==nums[L+1],则后面的都要跳过;(3)sum为0时,如果nums[R]==nums[R-1],则后面的都要跳过。
4、为了优化遍历,当 nums[i]大于 0,则三数之和必然大于 0,可以直接结束循环*/vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int> > anws;if( nums.size() <= 2 ){return anws;}//先对数组排序,便于判断重复元素O(NlogN)sort( nums.begin(), nums.end() );if( nums[0] > 0 ){ //全是正数肯定无解return anws;}//对于每一个nums[i],在[i+1,n-1]范围内找出包含自己的不重复的三元组int l,r,sum;for(int i=0; i<nums.size(); i++){//优化遍历,可直接结束if( nums[i] > 0 ){break;}//左右双指针遍历[i+1,n-1]l = i+1, r = nums.size()-1, sum;while( l < r ){sum = nums[i] + nums[l] + nums[r];if( sum == 0 ){anws.push_back({nums[i], nums[l], nums[r]});//三元组不能重复,保留最后一次符合的情况。注意l,r相邻的情况不用跳。while( l<r && nums[l]==nums[l+1] ){l++;}if( l<r && nums[r]==nums[r-1] ){r--;}//这里不能丢啊!前面那是去重操作,这个是一定要有的正常指针移动操作l++; r--;}else if( sum < 0 ){//左指针右移l++;}else{ // >0则右指针左移动r--;}}//三元组不能重复。避免nums[i]作为第一个数重复出现while(i+1<nums.size() && nums[i] == nums[i+1])i++;}return anws;}
};
http://www.jmfq.cn/news/4892887.html

相关文章:

  • 丰台建站推广/域名大全免费网站
  • 做学校网站会下线吗/seo综合查询站长工具关键词
  • 制作一个网站需要多长时间/东莞网站推广优化公司
  • 龙岗附近网站建设/超级推荐的关键词怎么优化
  • 网站开发项目实训/skr搜索引擎入口
  • 游戏网站建设与策划/wp博客seo插件
  • 网站建设平台合同模板下载/站优云seo优化
  • wordpress安装windows/深圳知名网络优化公司
  • 网站内容告知书/西安关键词排名推广
  • 网站建设公司运营经验/中小企业网站优化
  • 网站开发微信授权登录/百度正版下载并安装
  • 做的最好的epub网站/可以免费发广告的网站有哪些
  • 公司网站设计与制/百度资源搜索平台官网
  • 昆明学院网站建设与维护试题/徐州seo
  • 环保企业的网站怎么做/网络推广的工作好做吗
  • 做时时彩网站被抓/百度快照客服人工电话
  • 江西企业网站建设费用/怎么样在百度上免费推广
  • 长沙微网站制作/搜索引擎广告图片
  • 怎么做贝店式的网站/百度推广河南总部
  • 真么在网站里搜索/爱站网 关键词挖掘
  • 网页布局的基础/上海关键词优化公司bwyseo
  • 企业网站模板下载网址/网站页面优化包括
  • 新疆生产建设兵团第十二师/seo全网推广
  • 东莞响应式网站实力乐云seo/大连头条热点新闻
  • 做汽车的网站/nba排名最新赛程
  • 做腰椎核磁证网站是 收 七/廊坊今日头条新闻
  • 重庆网站建设流程/上海有什么seo公司
  • 互联网app推广具体怎么做/搜索引擎营销与seo优化
  • 提供网站建设公司哪家好/新媒体seo指的是什么
  • 网站建设推广哪个好/网络广告的收费模式有哪些