34. Search for a Range--Array/LeetCode/C++
来源:互联网 发布:软件产品质量承诺 编辑:程序博客网 时间:2024/06/09 20:03
34. Search for a Range
先“二分法”找“匹配的第一个数”;再“二分法”从“部分区域(匹配的第一个数,全体的最后一个数)”里找“匹配的最后一个数”。
关键:二分法
注意:第一次找时,从右向左找,把high尽量向左移(找第一个数);第二次找时,从左向右找,把high尽量向右移(找最后一个数);
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { int sz = nums.size(); if(sz == 0) return vector<int>({-1, -1}); vector<int> ret; int low = 0; int high = sz - 1; // 找第一个数 while(low <= high) { int mid = (low + high) / 2; if(nums[mid] >= target) // 从右向左遍历,找第一个数 (包括=号是为了退出循环) high = mid - 1; // 找到时,high变了,low没变 else low = mid + 1; } // 定位第一个数的下标 if(low < sz && nums[low] == target)//因为找到时,high变了,low没变,故用low定位第一个数 ret.push_back(low); else return vector<int>({-1, -1}); // 找第二个数 low = low; high = sz - 1; while(low <= high) { int mid = (low + high) / 2; if(nums[mid] <= target) // 从左(第一个数)向右遍历,找最后一个数(包括=号是为了退出循环) low = mid + 1; else high = mid - 1; } ret.push_back(high); return ret; // 定位第二个数的下标 }};
题目:
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
39%
思路:
0 0
- leetcode.array--34. Search for a Range
- 【C++】【LeetCode】34. Search for a Range
- LeetCode[Array]: Search for a Range
- 34. Search for a Range--Array/LeetCode/C++
- [C++]LeetCode: 65 Search for a Range
- [leetcode-34]Search for a Range(C)
- LeetCode c语言-Search for a Range
- 【leetcode】Array——Search for a Range(34)
- [LeetCode]34.Search for a Range
- LeetCode --- 34. Search for a Range
- LeetCode 34.Search for a Range
- [Leetcode] 34. Search for a Range
- [leetcode] 34.Search for a Range
- 【leetcode】34. Search for a Range
- [leetcode] 34. Search for a Range
- Leetcode 34. Search for a Range
- LeetCode 34. Search for a Range
- <LeetCode OJ> 34. Search for a Range
- 分布式事务和两阶段提交(2PC)
- Java并发编程:volatile关键字解析
- hdu 畅通工程(并查集)
- spring mvc+mybatis笔记(三)
- lua类的实现
- 34. Search for a Range--Array/LeetCode/C++
- STL实现简单的忽略大小写字 符串比较
- com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker - Cannot resolve com.mysq.jdbc.Connection.
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- 2016 icpc china final
- LeetCode-Array-1. Two Sum
- 解题报告:HDU 2196 Computer 简单树型DP
- HTML的学习
- ORACLE SEQUENCE(队列)用法