Leetcode: 34. Search for range(Week9, Medium)
来源:互联网 发布:linux x264命令 编辑:程序博客网 时间:2024/06/08 11:00
注:本题采用二分法的思想
Leetcode 34
Given an array of integers sorted in ascending order, 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].
- 题意:设计一个算法找到target的index范围,并且该算法的时间复杂度是O(log n)
- 思路:正常情况下,使用遍历的代码非常简洁,可以很轻易的解决这个问题。然而题目有时间复杂度的限制,O(log n)让我立刻反应出使用二分法的思想。
- 算法
- 先使用二分法,找到数组中其中一个target的index;
- 然后使用两个while循环,以二分法得到的index为起点向两边扩展;
- 当达到边界时,记录下边界的位置,得到index的范围。
代码如下:
/* 2017/11/5 34. Search for range思路:1.先用二分法找到目标值index;2.然后以这个index为起点,向两边扩展,得到目标index的范围*/class Solution {public: int search_target(vector<int>& nums, int target) { if (nums.size() == 0) return -1; int top = nums.size()-1; int mid = (nums.size()-1)/2; int low = 0; while(1) { if (low >= top) { if (nums[low] != target) { return -1; } else { return low; } } if (nums[mid] < target) { low = mid+1; } else if (nums[mid] > target) { top = mid-1; } else { return mid; } mid = low + (top-low)/2; } } vector<int> searchRange(vector<int>& nums, int target) { vector<int> result(2, 0); result[0] = search_target(nums, target); result[1] = result[0]; if (result[0] == -1) return result; while(result[0] >= 0) { if (nums[result[0]] == target) { if (result[0] == 0) break; result[0]--; } else { result[0]++; break; } } while(1) { if (nums[result[1]] == target) { if (result[1] == nums.size()-1) break; result[1]++; } else { result[1]--; break; } } return result; }};
以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!
阅读全文
0 0
- Leetcode: 34. Search for range(Week9, Medium)
- Leetcode 34. Search for a Range (Medium) (cpp)
- Leetcode 34. Search for a Range (Medium) (java)
- [Leetcode 34, Medium] Search for a Range
- 34. Search for a Range Medium
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)
- LeetCode-34-Search for a Range(二分法)-Medium
- 【LEET-CODE】34. Search for a Range【Medium】
- Search for a Range(medium)
- Medium 34题 Search for a Range
- leet34[medium]---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
- 1103
- Mybatis(第一阶段知识点)
- Oracle日期格式化问题:to_date(sysdate,'yyyy-MM-dd')与 to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd')区别
- POJ2155--Matrix::二维树状数组
- MT5 CRM支持接口开发
- Leetcode: 34. Search for range(Week9, Medium)
- Vue.JS实战:简单的购物车(二)
- 51nod 1289 大鱼吃小鱼
- 基于不同STM32库函数的代码性能对比
- bzoj 5027: 数学题
- Java位运算
- 欢迎使用CSDN-markdown编辑器
- qsort详解第二篇 转载
- java封装中的内部类