[Oferta] [rosto para provar questões de segurança 3: Procure matriz bidimensional]

"Prove Oferta segurança" Lista


I, Título Descrição

Em uma matriz bidimensional, cada fila da esquerda para a direita em ordem de tipo ascendente, para classificar cada coluna de cima para baixo, de modo a aumentar. Uma função completa, introduzir uma matriz tal bidimensional e um número inteiro, é determinado se a matriz contém o número inteiro.

Em segundo lugar, as ideias de resolução de problemas

Se essa descrição, cada coluna são ordenados de cima para baixo em ordem crescente, cada linha classificadas por ordem crescente da esquerda para a direita. Ambos cada linha e cada coluna é classificada. Para elementos na matriz classificada, com a dicotomia é, sem dúvida, um algoritmo de melhor. I foi o primeiro a encontrar cada linha, se o primeiro elemento deste elemento linha é maior do que o elemento que você deseja encontrar, não há necessidade de encontrar elementos desta linha. Se menos do que seria usar uma pesquisa binária esse elemento.

Em terceiro lugar, Código Descrição

package com.acm.Secondmonth;

public class Test03 {
	
	/**
	 * 二分查找 
	 * 首先从列开始  只要比该列的第一个元素大,就表示可以搜索这一行
	 * 
	 * @param matrix
	 * @param i
	 * @return
	 */
	private static boolean find(int[][] matrix, int k) {
		if(matrix == null) {
			throw new RuntimeException("invaild input! the array is null!");
		}
		for(int i=0 ; i<matrix.length ; i++) {
			if(matrix[i][0] < k) {
				if(binarySearch(matrix[i] , k)) {
					return true;
				}
			}else if(matrix[i][0] == k) {
				return true;
			}
		}
		
		return false;
	}

	public static boolean binarySearch(int[] num , int k) {
		
		int start =0 , end = num.length-1;
		while(start <= end) {
			int mid = (end+start)/2;
			if(num[mid] > k) {
				end = mid-1;
			}else if(num[mid] < k) {
				start = mid+1;
			}else {
				return true;
			}
		}
		return false;
	}
	public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 8, 9},
                {2, 4, 9, 12},
                {4, 7, 10, 13},
                {6, 8, 11, 15}
        };
        System.out.println(find(matrix, 7));    // 要查找的数在数组中
        System.out.println(find(matrix, 5));    // 要查找的数不在数组中
        System.out.println(find(matrix, 1));    // 要查找的数是数组中最小的数字
        System.out.println(find(matrix, 15));   // 要查找的数是数组中最大的数字
        System.out.println(find(matrix, 0));    // 要查找的数比数组中最小的数字还小
        System.out.println(find(matrix, 16));   // 要查找的数比数组中最大的数字还大
        System.out.println(find(null, 16));     // 健壮性测试,输入空指针
    }


}

 

Publicado 14 artigos originais · ganhou elogios 1 · vista 5524

Acho que você gosta

Origin blog.csdn.net/Vpn_zc/article/details/84295613
Recomendado
Clasificación