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

广东茶叶网站建设免费推广seo

广东茶叶网站建设,免费推广seo,怎么制作app软件赚钱,免费网站注册免费网站申请一、题目 输入一个递增排序的数组和一个数字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.dinnco.com/news/64459.html

相关文章:

  • 做公司的网站有哪些山西seo
  • 微网站建设要多少钱百度网盘手机版
  • 响应式网站是做列表重庆网站优化
  • 发帖子有哪些app平台seo网站排名推广
  • 手机交友网站源码网络推广员是什么工作
  • 网站建设 微信微博外包开发网站需要多少钱
  • 高端品牌网站设计公司价格跟我学seo从入门到精通
  • 做代码的网站360上网安全导航
  • dw怎么做网站地图手机百度app下载
  • 做课件可赚钱的网站廊坊网站seo
  • 怎么创建网站平台百度视频
  • 免费自助建站排名腾讯推广一次广告多少钱
  • 重庆市建设考试报名网站百度24小时人工客服电话
  • 网站设计宽度尺寸app推广地推接单网
  • 企业宣传网站有哪些太原优化排名推广
  • 网上书城网站建设目的四川旅游seo整站优化站优化
  • 取消网站验证码全国各城市感染高峰进度查询
  • 一站式网站建设设计网站seo外包公司有哪些
  • 做常识的网站青岛seo整站优化哪家专业
  • 静态网站怎么做网站搜索排名
  • 网站开发合作协议合同范本网站是怎么做的
  • 呼和浩特网站建设费用会计培训班一般收费多少
  • 古玩网站源码绍兴seo推广公司
  • 遵义哪里有做网站的网络营销企业案例
  • wordpress获取文章第一张图片青岛设计优化公司
  • 专业做设计师品牌网站网络营销学校
  • 记事本做网站滚动条发外链的论坛
  • 改图网网站谁做的seo属于什么职业部门
  • 做地方网站数据哪里来无锡网站建设方案优化
  • wordpress做视频播放网站电商营销推广有哪些?