zoukankan      html  css  js  c++  java
  • lintcode:搜索二维矩阵II

    题目

    搜索二维矩阵 II 

    写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。

    这个矩阵具有以下特性:

    • 每行中的整数从左到右是排序的。
    • 每一列的整数从上到下是排序的。
    • 在每一行或每一列中没有重复的整数。
    样例

    考虑下列矩阵:

    [

        [1, 3, 5, 7],

        [2, 4, 7, 8],

        [3, 5, 9, 10]

    ]

    给出target = 3,返回 2

    挑战

    要求O(m+n) 时间复杂度和O(1) 额外空间

    解题

    直接遍历,时间复杂度是O(MN)

    public class Solution {
        /**
         * @param matrix: A list of lists of integers
         * @param: A number you want to search in the matrix
         * @return: An integer indicate the occurrence of target in the given matrix
         */
        public int searchMatrix(int[][] matrix, int target) {
            // write your code here
            if(matrix == null)
                return 0;
            int row = matrix.length;
            if(row ==0)
                return 0;
            int col = matrix[0].length;
            int count =0;
            for(int i=0;i< row ;i++){
                for(int j=0;j<col;j++){
                    if(matrix[i][j] == target)
                        count++;
                }
            }
            return count;
        }
    }
    Java Code

    题目中数组是有序的,并且每一行或者每一列的元素没有重复的

    可以发现,某个数出现的次数在 0 到Min(col,row) 之间

    剑指offer上好像有一个和这个很类似的题目

    通过对矩阵进行划分,一次去一列

    Java程序

    public class Solution {
        /**
         * @param matrix: A list of lists of integers
         * @param: A number you want to search in the matrix
         * @return: An integer indicate the occurrence of target in the given matrix
         */
        public int searchMatrix(int[][] matrix, int target) {
            // write your code here
            if(matrix == null)
                return 0;
            int row = matrix.length;
            if(row ==0)
                return 0;
            int col = matrix[0].length;
            int count =0;
            int i=0;
            int j=col-1;
            while(i<row && j>=0){
                if(matrix[i][j] > target){
                        j--;
                    }else if(matrix[i][j]< target){
                        i++;
                    }else{
                        count++;
                        i++;
                        j--;
                    }
            }
            return count;
        }
        
    }
    Java Code

    Python程序

    class Solution:
        """
        @param matrix: An list of lists of integers
        @param target: An integer you want to search in matrix
        @return: An integer indicates the total occurrence of target in the given matrix
        """
        def searchMatrix(self, matrix, target):
            # write your code here
            if matrix == None:
                return 0
            row = len(matrix)
            if row ==0:
                return 0
            col = len(matrix[0])
            count = 0
            i = 0
            j = col - 1
            while i<row and j>=0:
                if matrix[i][j] > target:
                    j -=1
                elif matrix[i][j] < target:
                    i += 1
                else:
                    count += 1
                    i += 1
                    j -= 1
            return count
    Python Code
  • 相关阅读:
    不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1【转】
    atol实现【转】
    atol的实现【转】
    关于内存中栈和堆的区别(非数据结构中的堆和栈,区别)【转】
    ubuntu下安装android模拟器genymotion【转】
    buntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发【转】
    Ubuntu下安装Android studio【转】
    C++模板(二)【转】
    【转】iOS中设置导航栏标题的字体颜色和大小
    【转】Java 截取字符串
  • 原文地址:https://www.cnblogs.com/theskulls/p/5103450.html
Copyright © 2011-2022 走看看