zoukankan      html  css  js  c++  java
  • 面试题4:二维数组中的查找

    Java版本:

    面试题4:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    package com.zr.test;
    
    /**
     * 
     * @Description 二维数组中的查找
     * @author ZR
     * @date 2020年6月3日 下午4:06:25
     * @version V0.1
     */
    public class Num4 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Test1();
    	    Test2();
    	    Test3();
    	    Test4();
    	    Test5();
    	    Test6();
    	    Test7();
    	}
    
    	public static boolean find(int[][] array, int rows, int columns, int num) {
    		boolean found = false;
    		if (array != null && rows >= 0 && columns >= 0) {
    			int row = 0;
    			int column = columns - 1;
    			while (row < rows && column >= 0) {
    				if (array[row][column] == num) {
    					found = true;
    					break;
    				} else if (array[row][column] > num) {
    					column--;
    				} else {
    					row++;
    				}
    			}
    		}
    		return found;
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数在数组中
    	public static void Test1() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test1", matrix, 4, 4, 7, true);
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数不在数组中
    	public static void Test2() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test2", matrix, 4, 4, 5, false);
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数是数组中最小的数字
    	public static void Test3() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test3", matrix, 4, 4, 1, true);
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数是数组中最大的数字
    	public static void Test4() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test4", matrix, 4, 4, 15, true);
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数比数组中最小的数字还小
    	public static void Test5() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test5", matrix, 4, 4, 0, false);
    	}
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数比数组中最大的数字还大
    	public static void Test6() {
    		int matrix[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    		Test("Test6", matrix, 4, 4, 16, false);
    	}
    
    // 鲁棒性测试,输入空指针
    	public static void Test7() {
    		Test("Test7", null, 0, 0, 16, false);
    	}
    
    	// ====================测试代码====================
    	public static void Test(String testName, int[][] matrix, int rows, int columns, int number, boolean expected) {
    		if (testName != null)
    			System.out.println(testName + " begins: ");
    
    		boolean result = find(matrix, rows, columns, number);
    		if (result == expected)
    			System.out.println("Passed.");
    		else
    			System.out.println("Failed.");
    	}
    
    }
    
    

    C++版本:

    /*******************************************************************
    Copyright(c) 2016, Harry He
    All rights reserved.
    Distributed under the BSD license.
    (See accompanying file LICENSE.txt at
    https://github.com/zhedahht/CodingInterviewChinese2/blob/master/LICENSE.txt)
    *******************************************************************/
    
    //==================================================================
    // 《剑指Offer——名企面试官精讲典型编程题》代码
    // 作者:何海涛
    //==================================================================
    
    // 面试题4:二维数组中的查找
    // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按
    // 照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个
    // 整数,判断数组中是否含有该整数。
    
    #include <cstdio>
    
    bool Find(int* matrix, int rows, int columns, int number)
    {
        bool found = false;
    
        if(matrix != nullptr && rows > 0 && columns > 0)
        {
            int row = 0;
            int column = columns - 1;
            while(row < rows && column >=0)
            {
                if(matrix[row * columns + column] == number)
                {
                    found = true;
                    break;
                }
                else if(matrix[row * columns + column] > number)
                    -- column;
                else
                    ++ row;
            }
        }
    
        return found;
    }
    
    // ====================测试代码====================
    void Test(char* testName, int* matrix, int rows, int columns, int number, bool expected)
    {
        if(testName != nullptr)
            printf("%s begins: ", testName);
    
        bool result = Find(matrix, rows, columns, number);
        if(result == expected)
            printf("Passed.
    ");
        else
            printf("Failed.
    ");
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数在数组中
    void Test1()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test1", (int*)matrix, 4, 4, 7, true);
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数不在数组中
    void Test2()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test2", (int*)matrix, 4, 4, 5, false);
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数是数组中最小的数字
    void Test3()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test3", (int*)matrix, 4, 4, 1, true);
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数是数组中最大的数字
    void Test4()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test4", (int*)matrix, 4, 4, 15, true);
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数比数组中最小的数字还小
    void Test5()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test5", (int*)matrix, 4, 4, 0, false);
    }
    
    //  1   2   8   9
    //  2   4   9   12
    //  4   7   10  13
    //  6   8   11  15
    // 要查找的数比数组中最大的数字还大
    void Test6()
    {
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        Test("Test6", (int*)matrix, 4, 4, 16, false);
    }
    
    // 鲁棒性测试,输入空指针
    void Test7()
    {
        Test("Test7", nullptr, 0, 0, 16, false);
    }
    
    int main(int argc, char* argv[])
    {
        Test1();
        Test2();
        Test3();
        Test4();
        Test5();
        Test6();
        Test7();
    
        return 0;
    }
    
  • 相关阅读:
    URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)
    Java transient关键字使用小记
    java 序列化Serializable 详解
    JRE和JDK的区别
    JavaEE汇总
    Oracle汇总
    java提高篇(四)-----理解java的三大特性之多态
    SQL根据出生日期精确计算年龄、获取日期中的年份、月份
    PL/SQL学习笔记(四)之——删除重复记录
    PL/SQL学习笔记(二)
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13038321.html
Copyright © 2011-2022 走看看