leetcode二分查找问题整理
自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的能力都能在这个过程中考察出来。
在有序数组中寻找等于target的数的下标,没有的情况返回应该插入的下标位置 :http://oj.leetcode.com/problems/search-insert-position/
public int searchInsert(int[] A, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int start = ;
int end = A.length-;
while(start<=end){ // 小于等于
int mid = start + (end-start)/;
if(A[mid]<target)
start = mid+; // mid加1
else if(A[mid]>target)
end = mid-; // mid减1
else
return mid;
}
return start;
}
在不重复的旋转数组中寻找等于target的数的下标,没有的话返回-1 :http://oj.leetcode.com/problems/search-in-rotated-sorted-array/
class Solution {
public:
int search(int A[], int n, int target) {
if(n<=)
return -;
int mid;
int start=;
int end=n-;
while(start<=end)
{
mid=(start+end)/;
if(A[mid]==target)
return mid;
else if(A[mid]>=A[start])
{
if(target>=A[start]&&target<A[mid])
end=mid-;
else
start=mid+;
}
else
{
if(target>A[mid]&&target<=A[end])
start=mid+;
else
end=mid-;
}
}
return -;
}
};
在有重复的旋转数组中判断是否存在等于target的数 :http://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/
class Solution {
public:
bool search(int A[], int n, int target) {
if(n==)
return false;
int mid;
int start=;
int end=n-;
while(start<=end)
{
mid=(start+end)/;
if(A[mid]==target)
return true;
else if(A[mid]>A[start])
{
if(target<A[mid]&&target>=A[start])
end=mid-;
else
start=mid+;
}
else if(A[mid]<A[start])
{
if(target>A[mid]&&target<=A[end])
start=mid+;
else
end=mid-;
}
else
start++;
}
return false;
}
};
旋转数组中查找最小值,当没有重复元素时:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
class Solution {
public:
int findMin(vector<int> &num)
{
if(num.empty())
return ;
int s=;
int t=num.size()-;
int mid;
while(s<t)
{
if(num[s]<num[t])
return num[s]; //减少查找次数
mid=(s+t)/;
if(num[mid]<num[t])
t=mid;
else
s=mid+;
}
return num[s];
}
};
在有重复元素的时候,查找旋转数组中的最小值:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
class Solution {
public:
int findMin(vector<int> &num)
{
if(num.empty())
return ;
int s=;
int t=num.size()-;
while(s<t)
{
if(num[s]<num[t])
return num[s];
int mid=(s+t)/;
//如果存在重复元素时,进行顺序查找
if(num[s]==num[t]&&num[s]==num[mid])
{
int minValue=num[s];
while(s<t)
{
if(num[s]<minValue)
minValue=num[s];
s++;
}
return minValue;
}
if(num[mid]>=num[s])
s=mid+;
else
t=mid;
}
return num[s];
}
};
leetcode二分查找问题整理的更多相关文章
- leetcode 二分查找
https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ...
- [leetcode]二分查找总结
Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ...
- leetcode 二分查找 Search in Rotated Sorted ArrayII
Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...
- Leetcode 二分查找 Search Insert Position
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...
- leetcode 二分查找 Search in Rotated Sorted Array
Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...
- LeetCode 二分查找模板 II
模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 I
模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 III
模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...
- leetcode二分查找相关
目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...
随机推荐
- 在logopond中看到的优秀设计随想
本随笔仅仅只是自己对于设计作品的想法,不喜勿喷~ 昨日看到关于大神配色的文章,决定在logopond网站中看看优秀的作品,以为自己的配色找找灵感,学习学习,对自己有很强的震撼力的有: 以女性高跟性的抽 ...
- VS2010 删除空行
查找内容:^:b*$\n 替换为: 查找范围:当前文档 使用:正则表达式 vs2013 ^\s*(?=\r?$)\n
- Hadoop概念学习系列之分布式数据集的容错性(二十七)
一般来说,分布式数据集的容错性有两种方式: 1.数据检查点 2.记录数据的更新 我们面向的是大规模数据分析,数据检查点操作成本很高:需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往 ...
- LC并联谐振回路
- centos下apache安装后无法访问
2013.11.28遇到的问题: -------------------------------------- 一.centos下apache安装后无法访问 得查一下防火墙的问题 iptables添加 ...
- HDU 3364 Lanterns (高斯消元)
题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...
- thinkphp 防止sql注入
防止SQL注入 对于WEB应用来说,SQL注入攻击无疑是首要防范的安全问题,系统底层对于数据安全方面本身进行了很多的处理和相应的防范机制,例如: $User = M("User") ...
- 将UIImage保存成JPG或PNG格式存储在本地
-(void)pngAndJpg:(UIImage*)image{ NSString *pngPath = [NSHomeDirectory() stringByAppendingPathCompon ...
- Linux的端口和服务
一.端口和服务的关系端口号与相应服务的对应关系存放在/etc/services文件中,这个文件中可以找到大部分端口.使用netstat命令显示的服务名称也是从这个文件中找的.有人说将这个文件中的相应端 ...
- DIV 布局 左中右
<style type="text/css">body{ margin:0; padding:0;}.Header{ height:100px; background: ...