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

蚌埠seo外包seo教程优化

蚌埠seo外包,seo教程优化,wordpress绑定手机版,搭建网站架构怎么做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 != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

排序 + 双指针

「不重复」且和为 0 的三元组,这个「不重复」的要求使得我们无法简单地使用三重循环枚举所有的三元组。且三重循环时间复杂度为O(n^3),时间及空间复杂度均不满足我们使用的需求。
若我们枚举的三元组 (a,b,c) 满足a≤b≤c,保证了只有 (a,b,c)这个顺序会被枚举到,而 (b,a,c)、(c,b,a) 等等这些不会,这样就减少了重复。
可以发现,如果我们固定了前两重循环枚举到的元素 a和 b,那么只有唯一的 c满足 a+b+c=0。当第二重循环往后枚举一个元素 b′ 时,由于 b′>b,那么满足 a+b′+c′=0的 c′一定有 c′<c, c′在数组中一定出现在 c 的左侧。也就是说,我们可以从小到大枚举 b,同时从大到小枚举 c,即第二重循环和第三重循环实际上是并列的关系。

因此,我们就可以保持第二重循环不变,而将第三重循环变成一个从数组最右端开始向左移动的指针,这个思想就是「双指针」
注意每层遍历的去重。
注意第三重和第二重不能重合。

知识点:「双指针适用场景」当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(n^2)降至O(n)。

总体时间复杂度:O(n^2), 排序时间复杂度为O(nlogn),渐进抵消
空间复杂度:O(logN)

Swift

func threeSum(_ nums: [Int]) -> [[Int]] {let sortedNums = nums.sorted()let cnt = nums.countvar results: [[Int]] = [[Int]]()for i in 0..<cnt {// 需要和上一次枚举的数不相同if i>0 && sortedNums[i] == sortedNums[i-1] {continue}var k = cnt-1;let target = -sortedNums[i]for j in i+1..<cnt {// 需要和上一次枚举的数不相同if j > i+1 && sortedNums[j] == sortedNums[j-1] {continue}// 需要保证 b 的指针在 c 的指针的左侧while j<k && sortedNums[j]+sortedNums[k] > target {k -= 1}if j == k {break}if sortedNums[j]+sortedNums[k] == target {results.append([sortedNums[i], sortedNums[j], sortedNums[k]])}}}

OC

-(NSArray <NSNumber *>*)threeSum:(NSArray *)nums {NSArray *sortedNums = [nums sortedArrayUsingComparator:^NSComparisonResult(NSNumber * obj1, NSNumber * obj2) {return [obj1 compare:obj2];}];NSMutableArray *results = @[].mutableCopy;NSInteger cnt = nums.count;for (NSInteger i=0; i<cnt; i++) {// 需要和上一次枚举的数不相同if (i>0 && [sortedNums[i] integerValue] == [sortedNums[i-1] integerValue]) {continue;}NSInteger target = -[sortedNums[i] integerValue];//定义双指针NSInteger k = cnt-1;for (NSInteger j=i+1; j<cnt; j++) {// 需要和上一次枚举的数不相同if (j>i+1 && [sortedNums[j] integerValue] == [sortedNums[j-1] integerValue]) {continue;}while (j < k && [sortedNums[j] integerValue] + [sortedNums[k] integerValue] > target) {k--;}if (j == k) {break;}if ([sortedNums[j] integerValue] + [sortedNums[k] integerValue] == target) {[results addObject:@[sortedNums[i], sortedNums[j], sortedNums[k]]];}}}return results;
}
http://www.ds6.com.cn/news/52298.html

相关文章:

  • 怎么用ps做网站banner希爱力跟万艾可哪个猛
  • 建设银行的网站为什么登不上网络营销的优势有哪些
  • 网站功防教程app推广方案
  • 网站建站加盟高佣金app软件推广平台
  • 建一个网站要多久外链查询工具
  • 网站如何做关键词优化武汉建站公司
  • 江苏省建设厅网站查询seo实战优化
  • 免费网站建设那个好引流app推广软件
  • 金沙洲网站建设工作室怎么免费搭建自己的网站
  • 高端网站建设公司seo网站优化推广怎么样
  • wordpress 主题 设置天津seo外包平台
  • 深圳移动网站建设制作公司关键词歌词林俊杰
  • 网站建设实现功能seo关键词优化案例
  • 服务好的南昌网站制作清远新闻最新消息
  • 广州免费建站哪里有aso榜单优化
  • 怎么做网站简单的技能培训网
  • 怎样用b2b网站开发客户免费产品推广软件
  • 厦门 经营性网站备案软文发布平台
  • 使用angularjs的网站企业网站建设的流程
  • h5收款平台电商沙盘seo裤子关键词
  • 现在还有企业做网站吗商品热搜词排行榜
  • 如何在国外网站做免费推广重庆网站建设外包
  • 江门众瞬网络科技有限公司长春网站优化体验
  • 网站制作建设案例爱站网seo
  • 汕头网络公司网站建设综合权重查询
  • 医院网站建设 价格低seo排名软件有用吗
  • 网站代优化seo到底是做什么的
  • 查企业免费版深圳seo关键词优化外包公司
  • 平台类网站建设方案潍坊百度seo公司
  • 免费行情软件app网站大全下载免费常州seo外包