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

吉安网站公司网站投放广告怎么做

吉安网站公司,网站投放广告怎么做,软件工程课程设计,电子商务网站建设及维护一、题目解析1.不重复结合示例1,我们能知道[-1,0,1]和[0,1,-1]是相同的三元组,因为他们包含相同的元素。2.顺序不重要同样结合示例1 ,输出顺序不重要是指在输出结果时,不关心三元组的顺序;三元组顺序是指三元组内元素排…

一、题目解析

1.不重复

结合示例1,我们能知道[-1,0,1]和[0,1,-1]是相同的三元组,因为他们包含相同的元素。

2.顺序不重要

同样结合示例1 ,输出顺序不重要是指在输出结果时,不关心三元组的顺序;三元组顺序是指三元组内元素排列顺序不重要,例[-1,0,1],也可以是[0,-1,1]、[0,1,-1]等等

二、算法原理

解法1:排序+暴力枚举+set去重 时间复杂度为0(N^3)

毫无疑问这是暴力解法,但我们需要了解暴力解法,便于我们在暴力解法的基础上优化。

解法2:排序+双指针+set去重 时间复杂度为0(N^2)

1.先对数组进行排序

2.固定nums[i],当nums[i]>0,找不到满足的三元组 (排序过后,nums[i]以后都是正数,无法找到负数,使其和为0)

3.在该数后面的区间内,利用“双指针算法”,快速找到两个和为-nums[i]

解法3:排序+双指针+不用set去重 时间复杂度为O(N^2)

为了避免面试时遇到该问题,面试官不允许使用set去重,故多一种解法

1.在双指针区间内找到一种结果之后,left和right指针越过重复元素

2.当使用完一次双指针算法之后,i也需要越过重复元素

细节问题

1.如何保证不漏

在双指针区间内找到一种结果后,不要停,缩小区间继续寻找

2.避免越界问题

在越过重复元素时,需注意越界问题

可以先尝试解法2,然后再去试试解法3,提升自己的代码能力

三、代码示例

解法2:

vector<vector<int>> threeSum(vector<int>& nums){set<vector<int>> s;//set具有去重的性质vector<vector<int>> vv;sort(nums.begin(),nums.end());//排序if(nums[0] == 0 && nums[nums.size()-1] == 0){vv.push_back({0,0,0});//这里会自己转化为vector<int>return vv;}int i = 0,a = 0;int left = 0,right = 0;for(;i<nums.size();i++){a = nums[i];if(a>0) break;//当a<=0时,才存在三元组left = i+1;right = nums.size()-1;if(left>right) break;while(left < right){if(nums[left]+nums[right] < -a) left++;else if(nums[left]+nums[right] > -a) right--;else{s.insert({nums[i],nums[left],nums[right]});left++;right--;}}}for(auto e : s)//范围for,从s中依次取出元素{vv.push_back(e);}return vv;}

 

解法3:

vector<vector<int>> threeSum(vector<int>& nums){vector<vector<int>> ret;sort(nums.begin(),nums.end());int n = nums.size();for(int i = 0;i<n;){if(nums[i]>0) break;int left = i+1,right = n-1,target = -nums[i];while(left<right){int sum = nums[left]+nums[right];if(sum>target) right--;else if (sum<target) left++;else{ret.push_back({nums[i],nums[left],nums[right]});left++,right--;//去重操作while(left<right && nums[left] == nums[left-1]) left++;while(left<right && nums[right] == nums[right+1]) right--;}}//去重ii++;//这里代替for循环++功能,所以for循环处为空while(i < n && nums[i] == nums[i-1]) i++;}return ret;}

 

 可以看的出来,解法2最方便,但时间和空间上都比不过解法3,但解法3需要注意数组越界问题,所以在理解的基础上掌握解法3,无疑是最优选择

看到最后,如果对您有所帮助,还请点赞、关注和收藏,我们下期再见!

http://www.dtcms.com/wzjs/574979.html

相关文章:

  • 会员管理系统怎么用槐荫区网络营销seo
  • saas建站没有网站源代码么公司没注册可以做网站吗
  • 公司产品网站西地那非
  • 北京交易网站建设网页美工设计图片
  • 移动端网站建设 新闻动态大学生网页设计怎么做
  • 注册免费的网站有吗徐州集团网站建设公司
  • 网站如何做软文推广株洲在线
  • 深圳给企业做网站北京网站建设开发公司哪家好
  • 成绩查询网站开发做网页游戏网站需要什么
  • 大岭山东莞网站建设国外免费域名
  • 网站建设及推广方案ppt衣柜做网站的关键词
  • 唐山市住房和诚乡建设局网站wordpress复古三栏主题
  • 更改网站后台沈阳网络教育
  • 广州品牌网站设计公司wordpress网站载入慢
  • 南宁网站建设醉懂网络用asp做宠物网站页面
  • 网站cms在线识别简述网站一般建设的流程
  • 学校网站建设钉钉搜索引擎优化名词解释
  • 昆明网站推广优化公司做后台网站
  • 网站服务器租用的wordpress正在等待代理隧道响应
  • 网站的流程图吉林省建设监理协会网站诚信建设
  • 东莞网站建设 拉伸膜专业的营销型网站
  • 网站源码网网站开发是什么意思
  • 深圳福田区住建局官网廊坊视频优化推广
  • 网站建设要解决哪些方面的事项手机网站的网址是什么原因
  • 做商城网站要哪些流程前端vue低代码开发平台
  • 承德网站制作公司优选网十科技小程序模板网 凡平台
  • 课程网站开发与设计外贸新手怎么找客户
  • 做网站有没有效果上海市工程咨询行业协会
  • 淘宝客网站推广备案信息网站开发需要掌握哪些知识
  • 网站建设和网站搭建哪个好wordpress首页静态页