zoukankan      html  css  js  c++  java
  • 二分查找算法Java实现

    概述

    今天在牛客网上刷了一道关于数组的面试题,其中运用到的算法为二分查找。因此做如下总结。

    试题:

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    思路:

    有题目可知,数组每行是从小到大排列的,因此我们可以用,二分查找,时间复杂度为log2n。因为该题为二维数组,因此时间复杂度为nlog2n。

    算法实现

    我们首先从一维数组出发,进而扩充到二维。
    一维实现图
    在这里插入图片描述

    具体代码

    public class Solution {
        public boolean Find(int target, int [][] array) {
           boolean flag=false;
            int i, j;
            int indexx;
            int indexy;
            for(i=0;i<array.length;i++){
                indexx = 0;
                indexy = array[i].length-1;
                while(indexy>=indexx){
                    int mid =(indexy +indexx) / 2;
                    if (target < array[i][mid]) indexy = mid - 1;
                    else if (target > array[i][mid]) indexx = mid + 1;
                    else {
                        // 该if用于解决相邻元素相同的情况
                        flag= true;
                        indexy=indexx-1;
                }
                }
            }
            return flag;
        }
    }
    

    课后小结

    二分法通用模板

    public static int getPos(int[] A, int n, int val) {
        int x,y,mid;
        x=0;
        y=n-1;
        while(x<=y){
            mid=(x+y)/2;
            if(val<A[mid]){
                y=mid-1;
            }else if(val>A[mid]){
                x=mid+1;
            }else{
                if(mid>0&&A[mid-1]==A[mid])
                return mid-1;
                else
                return mid;
            }
        }
        return -1;
    }
    

    今日奖励

    时间复杂度计算
    求时间复杂度,首先找到算法中的基本语句,而基本语句是啥呢??
    基本语句,就是执行次数与整个算法的执行次数成正比的语句,说白了就是,循环次数最多的语句。找打了基本语句,我们也就可以表示出算法的时间复杂度,那么时间复杂度定义是啥呢?
    算法中基本语句的执行次数在渐进意义下阶用大O表示。

    我们根据几个例题来看看时间复杂度怎么来求

    在这里插入图片描述

  • 相关阅读:
    发布一个用于WinCE的矢量图控件
    [非原创]树和图的遍历
    对ZOJ第1146题的解答:LCDisplay
    [c#]可在任意位置弹出的BalloonTip
    windows程序开发中c++和c#的对照
    关于编译时的warning treated as error
    flyweight模式和图元几何变换
    i++和++i作为参数时的编译器处理方式分析~
    用小数数组计算E值(对ZOJ第1113题的解答)
    显示SendMessage和PostMessage的区别
  • 原文地址:https://www.cnblogs.com/gaochunhui/p/11700624.html
Copyright © 2011-2022 走看看