zoukankan      html  css  js  c++  java
  • 剑指offer(21):二维数组中的查找

    题目描述

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    两种思路:
    第一种,对每一行使用二分查找法进行查找,时间复杂度是O(nlogn)
    第二种:从左下角或者右上角开始查找,例如从右上角开始,往左数字越来越小,往下数字越来越大,那就将target与右上角数字进行比较,如果target大,那么就往下走,如果target小,那么就往左走。
    C++实现:
    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
    
            int row = array.size();
            if(row == 0)
                return false;
            int colnum = array[0].size();
            int i = 0;
            int j = colnum-1;
            while(i>=0&&i<row&&j>=0&&j<colnum){
                if(target == array[i][j])
                    return true;
                else if(target > array[i][j])
                    i++;
                else
                    j--;
            }
            return false;
        }
    };

     java实现二分法:

    public class Solution {
        public boolean Find(int target, int [][] array) {
            int row = array.length;
            if(row == 0)
                return false;
            int colunm = array[0].length;
            int low;
            int high;
            int mid;
            for(int i = 0;i<row;i++){
                low = 0;
                high = colunm-1;
                while(low<=high){
                    mid = low + (high - low)/2;
                    if(array[i][mid] == target)
                        return true;
                    else if(array[i][mid]<target)
                        low = mid + 1;
                    else
                        high = mid - 1;
                }
            }
            return false;
        }
    }

  • 相关阅读:
    https://www.cnblogs.com/marost/p/4668664.html
    UEFI 坑 Ubuntu
    Spring《六》管理Bean
    Spring《五》集合的注入方式
    Spring《四-一》解决自动装配的问题
    spring《四》自动装配
    Spring《三》ref 引用其他bean
    Spring《二》 Bean的生命周期
    Spring《一》
    Fragment间相互调用并传值
  • 原文地址:https://www.cnblogs.com/ttzz/p/13537767.html
Copyright © 2011-2022 走看看