自从做完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. Android Audio遇到播放无声时的分析

    在Android Audio开发过程中,有遇到播放ringtone时无声,但播放Music可以听到声音,关于无声问题的分析,在此做个笔记,方便以后回顾. 分析方向: 1:在音量控制面板中确认该音频流对 ...

  2. 深入理解HBase Memstore

    2013/08/09 转发自http://www.cnblogs.com/shitouer/archive/2013/02/05/configuring-hbase-memstore-what-you ...

  3. Principles of good RESTful API Design 好的 RESTful API 设计

    UPDATE: This post has been expanded upon and converted into an eBook. Good API design is hard! An AP ...

  4. easyui dialog遮罩层

    当dialog在一个iframe里时,此dialog的遮罩层也会只覆盖这个iframe,要想覆盖整个页面,就把dialog写到最外层的父页面中去,此时dialog的遮罩层会自动覆盖整个页面,若需要从子 ...

  5. c++builder 重载WindowProc、WndProc 截获消息

    c++builder 重载WindowProc.WndProc 截获消息 方法一WindowProc void __fastcall  myWindowProc(Messages::TMessage ...

  6. tinyxml2简单使用

    引入头文件 <span style="font-size:18px;">#include "HelloWorldScene.h" #include ...

  7. Linux下的设置静态IP命令详解

    网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为ifcfg-后面跟的就是网卡的名称,可以通过双TAB键查看然后编辑,也可以使用ifconfig查看,也 ...

  8. FATFS文件系统

    STM32移植文件系统,操作SD卡,对SD卡进行读写 FATFS文件系统与底层介质的驱动分离开来,对底层介质的操作都要交给用户去实现,它仅仅是提供了一个函数接口而已,函数为空,要用户添加代码.然后 F ...

  9. 1001.A+B Format (20)(思路,bug发现及其修改,提交记录)

    https://github.com/031502316a/object-oriented/tree/master/1001 ---恢复内容开始--- 1.解题思路 一开始见到题目时,感觉难的就是输出 ...

  10. C# 与 C++ 数据类型对照

    C++            C#=====================================WORD            ushortDWORD            uintUCH ...