博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode二分查找问题整理
阅读量:5891 次
发布时间:2019-06-19

本文共 2523 字,大约阅读时间需要 8 分钟。

自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的能力都能在这个过程中考察出来。

在有序数组中寻找等于target的数的下标,没有的情况返回应该插入的下标位置 :

public int searchInsert(int[] A, int target) {        // Note: The Solution object is instantiated only once and is reused by each test case.        int start = 0;        int end = A.length-1;               while(start<=end){                            //  小于等于            int mid = start + (end-start)/2;            if(A[mid]
target) end = mid-1; // mid减1 else return mid; } return start; }

在不重复的旋转数组中寻找等于target的数的下标,没有的话返回-1 :

class Solution {public:    int search(int A[], int n, int target) {        if(n<=0)            return -1;        int mid;        int start=0;        int end=n-1;        while(start<=end)        {            mid=(start+end)/2;            if(A[mid]==target)                return mid;            else if(A[mid]>=A[start])            {                if(target>=A[start]&&target
A[mid]&&target<=A[end]) start=mid+1; else end=mid-1; } } return -1; }};

在有重复的旋转数组中判断是否存在等于target的数 :

class Solution {public:    bool search(int A[], int n, int target) {        if(n==0)            return false;        int mid;        int start=0;        int end=n-1;        while(start<=end)        {            mid=(start+end)/2;            if(A[mid]==target)                return true;            else if(A[mid]>A[start])            {                if(target
=A[start]) end=mid-1; else start=mid+1; } else if(A[mid]
A[mid]&&target<=A[end]) start=mid+1; else end=mid-1; } else start++; } return false; }};

旋转数组中查找最小值,当没有重复元素时:

class Solution {public:    int findMin(vector
&num) { if(num.empty()) return 0; int s=0; int t=num.size()-1; int mid; while(s

在有重复元素的时候,查找旋转数组中的最小值:

class Solution {public:    int findMin(vector
&num) { if(num.empty()) return 0; int s=0; int t=num.size()-1; while(s
=num[s]) s=mid+1; else t=mid; } return num[s]; }};

 

 

转载地址:http://mnbsx.baihongyu.com/

你可能感兴趣的文章
设计模式:外观模式(Façade Pattern)
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
主域控制器的安装与配置步骤与方法
查看>>
JavaScript---事件
查看>>
Android NDK入门实例 计算斐波那契数列一生成jni头文件
查看>>
c/c++性能优化--I/O优化(上)
查看>>
将HTML特殊转义为实体字符的两种实现方式
查看>>
jquery 保留两个小数的方法
查看>>
网站架构设计的误区
查看>>
Standard C++ Programming: Virtual Functions and Inlining
查看>>
iis 故障导致网站无法访问
查看>>
作业抄袭简单检测
查看>>
ASP.NET 回调技术(CallBack)
查看>>
Spark源码分析 – BlockManager
查看>>
JS中的this
查看>>
人生, 不要在别扭的事上纠结
查看>>
C的面向对象编程
查看>>
日志服务器架构设计
查看>>
使用Unity开发Android的几种调试方法
查看>>