package com.LeetCode;

/**
 * 算法:二分搜索法查找一个值,并返回索引值
 * https://leetcode.com/problems/search-insert-position/
 *
 */
public class BinSearch {

public static void main(String[] args) {
        int[] a = {1,3,5,6};
        int[] b = {1,5,8, 13, 19};
        int[] c = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
        
        int result = binSearch2(a, 0);
        System.out.println("Index is:" + result);
        
    }
    
    
    public static int binSearch2(int srcArray[], int key)
    {
        int start = 0;
        int end = srcArray.length -1;
        int mid = srcArray.length / 2 ;
        System.out.println("mid="+mid);
        
        if (key == srcArray[mid])
        {
            return mid;
        }
        
        while (start <= end)
        {
            mid = (end-start)/2+start;
            System.out.println("Now mid="+mid);
            if(key<srcArray[0])
            {
                System.out.println("Smaller than all numbers in array. return 0");
                return 0;
            }
            if(key>srcArray[end])
            {
                System.out.println("Bigger than all numbers in array.");
                return srcArray.length;
            }
            if ((key>srcArray[mid-1]) && (key < srcArray[mid]))
            {
                System.out.println("Not in index, return 'mid' value");
                return mid;
            }
            if (key<srcArray[mid])
            {
                end = mid-1;
            }
            else if (key>srcArray[mid])
            {
                start = mid+1;
            }
            else {
                {
                    return mid;
                }
            }
        }
        System.out.println("Can't find the number in array.");
        return -1;
        
    }
}

Leetcode: 二分搜索法的更多相关文章

  1. LeetCode Binary Search Summary 二分搜索法小结

    二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目 ...

  2. [LeetCode] Binary Search 二分搜索法

    Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...

  3. Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)

    719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...

  4. js实现二分搜索法

    二分搜索法: 也称折半搜索,是一种在有序数组中查找特定元素的搜索算法. 实现步骤: 1. 首先从数组中间开始查找对比,若相等则找到,直接返回中间元素的索引. 2. 若查找值小于中间值,则在小于中间值的 ...

  5. leetcode二分查找问题整理

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

  6. leetcode 二分查找

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

  7. 算法leetcode二分算法

    二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 一.有序序列 ...

  8. 二分搜索法(转载自vanezkw)

    二分查找算法java实现 今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. ...

  9. [leetcode]二分查找总结

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

随机推荐

  1. Label 自适应文本(StoryBoard/xib)

    To make your label automatically resize height you need to do following: Set layout constrains for l ...

  2. ldap搭建

    yum install openldap openldap-servers openldap-clients -y #检查是否安装成功 slapd -VVopenldap的配置文件都在/etc/ope ...

  3. Linux内核链表深度分析

    链表简介:链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链.相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入 ...

  4. 关于Java中线程取值并返回的方法

    如何让一个线程不断跑起来,并且在取到值的时候能返回值而线程能继续跑呢? 我们都知道可以用Callable接口获得线程的返回值,或者触发事件监听来操作返回值,下面我将介绍另一种方法. public ab ...

  5. nginx-轮询、权重、ip_hash 、fair模式

    在 linux 下有 Nginx.LVS.Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略): 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器 ...

  6. noi.ac NA529 【神树的矩阵】

    表示今天一发A了这题拿了rk3...是个sb构造... 考虑除了\(n=1/m=1\)的情况,最小次数\(ans\)不会\(>3\). 对于\(n=1/m=1\),暴力即可. 然后考虑\(ans ...

  7. GitHub入门和项目托管

    (博主原创文章,转载请注明出处: http://www.cnblogs.com/xianlei/git) 前言: 本文目标: Git入门,能够在Github托管项目,能够进行实际项目开发 本文主要内容 ...

  8. Socket的通信机制?

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议 ...

  9. Git账号Window10系统配置密钥

    Git 拉取 推送 报错 . Window10系统 需要配置Git账号密钥.

  10. 解决You may use special comments to disable some warnings.

    问题:运行vue项目出现: You may use special comments to disable some warnings.Use // eslint-disable-next-line ...