leetcode 34. Search for a Range 及35
来源:互联网 发布:北京淘宝模特 编辑:程序博客网 时间:2024/06/18 08:13
leetcode 34题 search for a Range
题意为查找目标值的起始和结束位置,不存在则返回0.
用二分查找即可做到满足条件时间复杂度为O(lgn).我的思路是首先查找出第一个等于target的值,再在其左,右分别查找。
起初一直超时,原因是while的判断条件和对最左值的更新上,起初直接把最左值(head等)直接赋值为中间值,结果是跳不出循环因为/取小的那个,就会出不了循环。还有对第一次查找后的判断,当正常出循环而不是break 出循环时,需要判断是否是等于target。第一次的循环是为了缩小查找范围。
35题采用34题的第一部分再稍作修改即可
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> pos(2,-1); if (nums.empty() || nums.back() < target) return pos; int head,tail,mid; head = 0; tail = nums.size() - 1; if (head == tail) { if(target == nums[head]) { pos[0] = head; pos[1] = head; } return pos; } while(head < tail) //no mid element { mid = (head + tail)/2; if(target == nums[mid]) { break; } else if (target > nums[mid]) { head = mid + 1; } else tail = mid; } if (head == tail) //只有一个在最后,或者没有找到 { if (nums[head]== target) { pos[0] = head; pos[1] = head; } return pos; } int fistart = mid,fiend = mid,newmids = mid,newmide = mid; while(head < newmids) { if(nums[(head + newmids)/2] < target) { head = (head + newmids)/2 + 1; } else { if(fistart > (head + newmids) / 2) fistart = (head + newmids) / 2; newmids = (head + newmids)/2; } } while(newmide < tail ) { if(nums[(newmide + tail)/2] > target) { tail = (newmide + tail)/2; } else { if(fiend < (newmide + tail)/2) fiend = (newmide + tail)/2; newmide = (tail + newmide)/2 + 1 ; } } if (nums[newmide] == target) fiend = newmide; pos[0] = fistart; pos[1] = fiend; return pos; } };
阅读全文
0 0
- leetcode 34. Search for a Range 及35
- [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
- 34. Search for a Range LeetCode
- [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
- cin、cin.get()和cin.getline()的用法和区别
- Apache+Python+Windows进行CGI编程新手上路时的各种坑
- [JavaEE
- Object常见方法
- TortoiseSVN使用-文件状态说明
- leetcode 34. Search for a Range 及35
- RabbitMQ安装
- 洛谷 1196 银河英雄传说
- 链表中倒数第k个结点
- 下载图片省流量模式
- SMO算法
- java.lang.StackOverflowError(hibernate内存溢出)
- introduce csharp
- SIFT算法详解