zoukankan      html  css  js  c++  java
  • 算法图解阅读笔记

    二分查找

    算法概念:二分查找用于处理有序列表,如果查找的元素包含在列表中,返回其位置,否则返回null。

    算法思路:将有序列表均分为两个子列表,取中间数和期望数字进行对比,如果大于期望数字,则取较小的子列表递归,如果小于期望数字,则选较大的子列表递归。

    算法实现:

    Java

    /**
     * 二分查找算法实现(目标数一定在列表中的情况)
     * <p>
     * 思路:通过对比有序列表中间值和目标数,得出下一步应该往有序数组的哪一子列表继续对比直到获得最终结果
     */
    public class BinarySearch {
    
        public static Integer solution(List<Integer> nums, int num) {
    
            if (CollectionUtils.isEmpty(nums)) {
                return null;
            }
    
            int high = nums.size() - 1;
            int low = 0;
    
            int midIndex = 0;
            int guess = 0;
    
            //循环遍历
            while (high < nums.size() && low > -1) {
                midIndex = (high + low) / 2 ;
                guess = nums.get(midIndex);
                //找到目标数,返回索引
                if (guess == num) {
                    return midIndex;
                    //目前数小于目标数,索引向右滑动
                } else if (guess < num) {
                    low = midIndex + 1;
                    //目前数大于目标数,索引向左滑动
                } else{
                    high = midIndex - 1;
                }
            }
            return null;
        }
    
    
        public static void main(String[] args) {
    
            List<Integer> list = Lists.newArrayList();
            for(int i=0;i<11;i++){
                list.add(i);
            }
    
            //9
            System.out.println(solution(list,9));
    
        }
    
    }

     算法应用:

    1.可用于查询字典目录,如果使用二分查找,目录条数为n,最坏情况下执行x次,2^x=n,时间复杂度 log2(n).

  • 相关阅读:
    Mac上安装Git
    原型对象和原型链
    ES6入门
    一边宽度固定,一边宽度自适应
    15种css居中方式
    阿里CDN核心技术解密
    尽量用const,enum,inline代替define
    Nginx安装
    百度笔试题:malloc/free与new/delete的区别(转)
    C++内存管理(转)
  • 原文地址:https://www.cnblogs.com/Simon-cat/p/10308346.html
Copyright © 2011-2022 走看看