自从做完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二分查找问题整理的更多相关文章

  1. leetcode 二分查找

    https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ...

  2. [leetcode]二分查找总结

    Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ...

  3. leetcode 二分查找 Search in Rotated Sorted ArrayII

    Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...

  4. Leetcode 二分查找 Search Insert Position

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...

  5. leetcode 二分查找 Search in Rotated Sorted Array

    Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...

  6. LeetCode 二分查找模板 II

    模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...

  7. LeetCode 二分查找模板 I

    模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...

  8. LeetCode 二分查找模板 III

    模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...

  9. leetcode二分查找相关

    目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...

随机推荐

  1. RPC进阶篇

    RPC实现结构拆解 RPC过程调用详解:RPC 服务端通过 RpcServer 去导出(export)远程接口方法,而客户端通过 RpcClient 去引入(import)远程接口方法. 客户端像调用 ...

  2. Scrum概述

    • 敏捷方法是一类软件开发流程的泛称: • 敏捷方法是相对于传统的瀑布式软件过程提出的: • 敏捷方法可以用敏捷宣言(4条).敏捷原则(12条)来概括: • 敏捷原则通过一系列的敏捷实践来体现出来: ...

  3. This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决

    在一个Mysql表达式中使用嵌套查询,出现了这个错误.原因是内层select语句带有limit子句.   在网上查了下,有文章指出: 比如这样的语句是不能正确执行的. select * from ta ...

  4. linux c下mysql编程样例

    /* ============================================================================ Name : mysql1.c Auth ...

  5. win7的centos虚拟机上搭建mysql5.6服务

    1 安装包下载 mysql5.6下载地址: http://dev.mysql.com/downloads/mysql/ 这里选择linux版本: navicat11破解版的下载地址: http://d ...

  6. Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

    mvn war:war命令出错: 原因: maven的web项目默认的webroot是在src\main\webapp.如果在此目录下找不到web.xml就抛出以上的异常. 解决方案: 在pom.xm ...

  7. 【转】从零开始编写自己的C#框架(7)——需求分析

    转自:http://www.cnblogs.com/EmptyFS/p/3653934.html 本章内容虽然叫“需求分析”,实际上关于具体的需求分析操作步骤并没有深入去写,因为细化的话那将是一本厚厚 ...

  8. ms-class的进化

    ms-class是avalon用得最多的几个绑定之一,也正因为如此其功能一直在扩充中.根据时期的不同,分为旧风格与新风格两种. 旧风格是指正在ms-class后面跟着类外,然后在绑定值中添加表达式,即 ...

  9. 根据路径获得文件名以及Aspose.Cells.dll操作excel 以及使用iTextSharp.text.pdf.PdfReader.dll对PDF的操作

    string result = Regex.Match(str,@"[^\\]+$").Value;//正则表达式 this.listBox1.Items.Add(Path.Get ...

  10. C++、GDAL创建shapefile文件

    源代码网址:http://download.csdn.net/detail/ivanljf/5834823 一.先贴出第一段代码: #include "ogrsf_frmts.h" ...