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).

  • 相关阅读:
    spring中@Lookup的作用
    spring中的观察者模式
    spring事务源码解析
    spring中@Configuration注解的作用
    HTML5和CSS3
    TCP/IP协议
    Android项目的settings.gradle和build.gradle
    AndroidManifest.xml 最全详解
    Android实现网络监听
    Android数据存取
  • 原文地址:https://www.cnblogs.com/Simon-cat/p/10308346.html
Copyright © 2011-2022 走看看