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

如何自己建设商城网站百度做推广一般要多少钱

如何自己建设商城网站,百度做推广一般要多少钱,网站建设宀金手指花总十四,阿里云centos7 搭建wordpress一、题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例 1: 输入:nums [2,7,11,15], target 9 输出:[2,7] 或者 [7…

一、题目

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]

示例 2:

输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]

限制:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^6

二、题目分析&解题思路

2.1 从头往后遍历法

有没有人和我一样,想着从头往后遍历,例如 第一个用例
2,7,11,15
依次把每个数字 与 target - nums[i] 存到 map 里
存成这样:
2,7
7,2

例如先 存 2,7
再遍历 7 时 计算 target - 7 = 2 ,再去用 map.find(2); 找到了即可
否则继续往后遍历

代码实现:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int, int> mapTemp;for(int i = 0; i < nums.size(); i++){if(nums[i] > target){break;}int iTemp = target - nums[i];if(mapTemp.find(iTemp) == mapTemp.end()){mapTemp.insert(make_pair(nums[i], iTemp));}else{nums.resize(0);auto iter = mapTemp.find(iTemp);nums.push_back(iter->first);nums.push_back(iter->second);break;}}return nums;}
};

在这里插入图片描述
虽然过了但是可以看到,所耗时间和所额外开辟的空间都非常大,这代码还不如不写
时间复杂度:常规遍历 O(N) 加上每一次的 map.find nLog(n) ,还额外开辟了map 存储 2N的空间,太鸡肋了,完全忽略了 升序这一个特点;
因此可以考虑使用双指针法

2.2 双指针遍历法

以示例 1 的用例来看,数组是升序,左小右大,那么只需要做如下操作:
在这里插入图片描述
代码实现:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int left = 0;int right = nums.size() -1;while(left < right){if((nums[left] + nums[right]) > target){//说明右边的数字太大了right--;}else if((nums[left] + nums[right]) < target){//说明左边的数字太小了left++;}else{nums[0] = nums[left];nums[1] = nums[right];nums.resize(2);break;}}return nums;}
};

在这里插入图片描述
是不是立马好了一点,但是感觉还是很慢,还有没有优化的空间呢?

2.3 缩减范围+双指针法

我们继续来看 这一组用例
2 7 11 15
target = 9;
用双指针的话,其实 11 15 这两个数字完全没有必要去遍历,因为 其 已经 大于 target 了。且题目已经告知
在这里插入图片描述
说明没有负数,那么说明这一部分可以舍去,可以做一个裁剪,把范围缩小,把多余的右部分数组元素舍去,减少 双指针法的 right 区间,降低时间复杂度。

    int GetRightIndex(vector<int>& nums, int target){int left = 0;int right = nums.size()-1;while(left < right){int mid = (left + right) /2;if(nums[mid] < target){left = mid + 1;}if(nums[mid] >= target){right = mid;}}return right;}

可以看到速度有效提升
在这里插入图片描述

三、代码实现

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {int left = 0;int right = GetRightIndex(nums, target);while(left < right){if((nums[left] + nums[right]) > target){//说明右的数字太大了right--;}else if((nums[left] + nums[right]) < target){//左边的数字太小了left++;}else{nums[0] = nums[left];nums[1] = nums[right];nums.resize(2);break;}}return nums;}int GetRightIndex(vector<int>& nums, int target){int left = 0;int right = nums.size()-1;int mid = 0;while(left < right){mid = (left + right) /2;if(nums[mid] < target){left = mid + 1;}if(nums[mid] >= target){right = mid;}}return right;}
};

在这里插入图片描述

http://www.khdw.cn/news/4473.html

相关文章:

  • 无锡做网站需要多少钱东莞seo建站优化工具
  • 网站地图设计成品影视app开发
  • 什么网站比较少人做武汉搜索引擎营销
  • 云南网站推广重庆关键词自然排名
  • 做折扣的网站有哪些现在外贸推广做哪个平台
  • 网站关于我们怎么做搜索引擎排名优化是什么意思
  • wordpress 批量建站百度竞价排名名词解释
  • 云南做网站费用东莞市民最新疫情
  • 天堂呦呦衡阳seo优化首选
  • 中国最新消息最新疫情德州网站建设优化
  • 什么是一学一做视频网站好安卓优化大师app下载安装
  • 沈阳平台网站建设英语培训
  • 手机做网站多少钱qq群推广链接
  • 章丘做网站优化百度一下网页入口
  • 沧州做网站价格广东短视频seo营销
  • 南山品牌网站建设企业站长工具使用方法
  • 无锡谁会建商务网站黄冈网站推广软件免费下载
  • 无障碍网站建设的摘要直接进入网站的代码
  • 个人网站可以做地方免费的网络推广渠道
  • 贵阳网站建设平台百度免费咨询
  • 深圳有多少家设计公司企业seo培训
  • 做网站运营有前途seo搜索引擎优化实战
  • 做建筑看那些网站百度竞价平台官网
  • 网站建设一般用什么语言seo收费还是免费
  • 高端网站建设案例网络营销与管理专业是干什么的
  • 做外贸比较好用的网站seo关键词找29火星软件
  • 北京网站seo百度投诉中心
  • 个人做网站有什么用网站查询信息
  • phpcms双语网站怎么做肇庆seo优化
  • wordpress 快讯模板重庆seo网站运营