给定按升序排序的整数数组,找到给定目标值的开始和结束位置。 如果在数组中找不到目标,则返回[-1,-1]。
来源:互联网 发布:淘宝上传好评截图 编辑:程序博客网 时间:2024/06/06 14:57
本题源自leetcode 34
-----------------------------------------------------------
思路:用二分查找的思路,首先找出最左边的target,就是当target <= num【mid】 end = mid;
2 然后 第一次循环结束后判断 start 等于 target,就是最左边的。然后找最右边的target 一样用 二分查找的方法
代码:
vector<int> searchRange(vector<int>& nums, int target) { int n = nums.size(); vector<int> ret(2, -1); if(n == 0) return ret; int i = 0, j = n - 1; while (i < j) //找最左边的 { int mid = (i + j) /2; if (nums[mid] < target) i = mid + 1; else j = mid; } if (nums[i]!=target) return ret; else ret[0] = i; // 找最右边的 j = n-1; // while (i < j) { int mid = (i + j) /2 +1 ;// 让中间点基于右边 if (nums[mid] > target) j = mid - 1; else i = mid; } ret[1] = j; return ret; }思路 2 用 stl的函数
代码:
vector<int> searchRange(vector<int>& nums, int target) { int n = nums.size(); vector<int> res(2,-1); if(n == 0) return res; int lo = lower_bound(nums.begin(),nums.end(),target)-nums.begin(); if(lo == n || nums[lo] != target) return res; res[0] = lo; int hi = upper_bound(nums.begin(),nums.end(),target) - nums.begin() -1; res[1] = hi; return res; }
思路3 :
代码;
int n = nums.size(); vector<int> res(2,-1); if(n == 0) return res; int lo = 0; int hi = n-1; int idx = -1; while(lo <= hi){ //求 最左边的 target int mid = (lo + hi) >> 1; if(nums[mid] >= target) hi = mid - 1; else lo = mid + 1; if(nums[mid] == target) idx = mid; } res [0] = idx; // lo = 0; hi = n-1; while(lo <= hi){ //最右边的target int mid = (lo + hi) >> 1; if(nums[mid] <= target) lo = mid + 1; else hi = mid - 1; if(nums[mid] == target) idx = mid; } res[1] = idx; return res; }
阅读全文
0 0
- 给定按升序排序的整数数组,找到给定目标值的开始和结束位置。 如果在数组中找不到目标,则返回[-1,-1]。
- 给定按升序排序的整数数组,找到给定目标值的起始和终止位置。 您的算法的运行时复杂度必须是O(log n)的顺序。
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- 在已知字符串中查找给定的子串,若找到返回位置,找不到返回-1
- 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值
- 给定整形数组A和目标整数t,A相邻元素差绝对值为1,请找到t在A中的位置
- 给定整形数组A和目标整数t,A相邻元素差绝对值为1,请找到t在A中的位置
- 给定整形数组A和目标整数t,A相邻元素差绝对值为1,请找到t在A中的位置
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- Two Sum 从数组中找到两个位置的值相加和为给定目标的值
- 在排序数组中找给定数字出现的次数和任意整数有几种分解方法
- 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- PHP实现数组中两个数的和等于给定的目标值
- PHP实现数组中两个数的和等于给定的目标值
- 在升序数组中查找和等于给定值的两个数
- :输入10个整数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!
- 汇编小结
- QT5.9.2 程序异常结束。 The process was ended forcefully.
- 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升
- Mongdb Replica Set 搭建(详细步骤及截图)及测试
- (转)Python类、模块、包的区别
- 给定按升序排序的整数数组,找到给定目标值的开始和结束位置。 如果在数组中找不到目标,则返回[-1,-1]。
- 图像边缘检测算子非常好的一篇博文
- Flex的Array和ArrayCollection的用法和区别
- unity导xcode工程添加文件设置,Hierarchy面板打印gameobject层级
- JQuery右键菜单插件ContextMenu使用指南
- 测试
- C#CHART使用总结
- hadoop、hive搭建
- linux系统安装zookeeper