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

成都彭州网站建设南昌优易科 网站建设

成都彭州网站建设,南昌优易科 网站建设,免费建设视频网站,备案期间需要关闭网站等审核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 != kj != 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 。

首先利用双指针思想进行寻找合适的三个数,再利用set进行去重。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();set<vector<int>> res;sort(nums.begin(), nums.end());for(int i = n-1; i > 1; i--){int c = nums[i];int temp = 0-c;int left = 0, right = i-1;while(left < right){if(nums[left] + nums[right] < temp)left++;else if(nums[left] + nums[right] > temp)right--;else{res.insert({nums[left], nums[right], c});left++;}}}vector<vector<int>> ret;for(auto it : res){ret.push_back(it);}return ret;}
};

离谱……………………

对于去重的方法有进一步优化

 将c从右向左固定:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();vector<vector<int>> ret;sort(nums.begin(), nums.end());    1、排序for(int i = n-1; i > 1; ){int c = nums[i];int temp = 0-c;int left = 0, right = i-1;while(left < right)  2、此处使用双指针思想{if(nums[left] + nums[right] < temp)left++;else if(nums[left] + nums[right] > temp)right--;else{ret.push_back({nums[left], nums[right], c});int flag = nums[left++];while(left<right && nums[left] == flag)   left++;        3、对于去重操作的优化①flag = nums[right--];while(left<right && nums[right] == flag)right--;}}i--;                       4、去重的优化②while(i>1 && nums[i+1] == nums[i]) // 把whlie写错成if调试半天才发现i--;}return ret;}
};

将c从左向右固定

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end());    // 1、排序vector<vector<int>> ret;for(int i = 0; i < n; ){if(nums[i] > 0) break;    // 2、作一个小优化,如果左边数大于零则无法满足和为0int left = i+1, right = n-1;int target = -nums[i];while(left < right)        // 3、双指针进行寻找{int sum = nums[left] + nums[right];if(sum < target)    left++;else if(sum > target)   right--;else{ret.push_back({nums[i], nums[left++], nums[right--]});while(left < right && nums[left] == nums[left-1])left++; // 当left位置重复时,left后移while(left < right && nums[right] == nums[right+1])right--; // 当right位置重复时,right左移}}i++;while(i < n && nums[i]==nums[i-1])i++;}return ret;}
};

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

相关文章:

  • 开封网站建设培训学校wordpress 数据库名称
  • 南宁网站建设公司招聘搜索率最高的关键词
  • 网站建设公司推销wordpress 获取page
  • 河南网站seo设计购物网站模板代码
  • 如何做国外的电商网站设计运维工程师培训
  • 许昌网站seo网站空间租用
  • 做一个平台网站大概多少钱揭阳网站建设公司
  • 荣耀手机官网网站学校网站建设报价
  • 盘石做的网站常州公司网站模板建站
  • 做网站图片切图是什么wordpress判断用户权限
  • 网站广告出价平台wordpress文章导入 id
  • wordpress一键分享长沙优化网站排名
  • 网站几个模板最好加强网站建设
  • 优秀的版式设计网站南通集团网站建设
  • 东莞锂电池网站建设阿里云这么建设网站
  • 中华住房与城乡建设厅网站个人微信营销
  • 专门做外卖的网站菏泽做网站的公司
  • 百度我的网站wordpress用了cdn和缓存插件
  • 网站制作合作协议解决wordpress更改新域名后网站不能访问的问题
  • 企业网站模板 优帮云北京展台设计制作
  • 注册自己的网站网站类型定义
  • 优秀的网站建设中国建设银行人才招聘网站
  • 哈尔滨seo整站优化广东事业单位网站
  • 旅游网站建站目的域名推荐网站
  • 云服务器做网站好吗松岗网站的建设
  • html用什么软件北京seo排名收费
  • 重庆智能网站建设多少钱网站双语怎么做
  • 帝国cms7.0网站搬家换域名换空间等安装教程wordpress彩色标签固定宽度代码
  • 网站的最近浏览 怎么做网络营销和电子商务区别
  • 亚马逊企业网站建设烟台seo网站推广