zoukankan      html  css  js  c++  java
  • 无序数组的二分查找法

    最近有个面试题,无序数组二分查找?不知道哪位变态要这么搞?有排序的功夫直接遍历查询不好吗?

    无序数组二分,如果不排序,真不知道用二分法怎么搞,想用递归,搞了半天也没搞出来。

    最后还是先排序,另一个数组保存排序前后的对应下标关系,二分法找到排序后的目标元素下标,根据下标关系数组获取原始下标。

    package mianshi.算法.二分查找法.面试._1;
    
    public class MyBinaryTest {
        /**
         * @param args
         */
        public static void main(String[] args) {
            //int[] arr = {1,3,4,66,77,88,99};
            int[] arr = {1,4,3,99,77,88,66};//{0,2,1,6,4,5,3}{1,3,4,66,77,88,99}
            // 下标变化数组
            int[] indexArr = new int[arr.length];
            for(int i=0;i<indexArr.length;i++){
                indexArr[i] = i;
            }
            // 排序,排序后的下标对应关系。
            for(int i=0;i<arr.length-1;i++){
                for(int j=i+1;j<arr.length;j++){
                    if(arr[i]>arr[j]){
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                        int indexTemp = indexArr[i];
                        indexArr[i] = indexArr[j];
                        indexArr[j] = indexTemp;
                    }
                }
            }
            int index = getBinarySearch(4,arr,indexArr);
            System.out.println(index);
        }
    
        private static int getBinarySearch(int ele, int[] arr, int[] indexArr) {
            int min = 0;
            int max = arr.length - 1;
            int mid = 0;
            while(min <= max){
                mid = (min + max ) >> 1;
                if(ele > arr[mid]){
                    min = mid + 1;
                }
                if(ele < arr[mid]){
                    max = mid - 1;
                }
                if(ele == arr[mid]){
                    return indexArr[mid];
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    0907 安装 Pycharm
    zabbix监控redis多实例(low level discovery)
    zabbix3.0配置邮件报警
    zabbix通过jmx监控tomcat
    分布式文件系统FastDFS安装与配置(单机)
    nginx+tomcat配置https
    利用python分析nginx日志
    查找IP来源
    清除nginx静态资源缓存
    Nginx缓存配置及nginx ngx_cache_purge模块的使用
  • 原文地址:https://www.cnblogs.com/super-chao/p/15034072.html
Copyright © 2011-2022 走看看