zoukankan      html  css  js  c++  java
  • 经典面试算法题:线性查找有序二维数组

    从右上角开始搜索,当前的元素map[x][y]和要搜索的数n有如下可能:

    map[x][y]==n --> 返回true
    map[x][y]>n   --> 向左移动
    map[x][y]<n   --> 向下移动

    搜索过程例子:

    AC代码:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            
            Scanner sc=new Scanner(System.in);
            
            int n=sc.nextInt();
            int m=sc.nextInt();
            int k=sc.nextInt();
            
            int x[][]=new int[n][m];
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    x[i][j]=sc.nextInt();
                }
            }
            
            boolean ans=search(x,k);
            System.out.println(ans);
            
        }
        
        public static boolean search(int map[][],int n){
            int x=0,y=map.length-1;
            while(x<map.length && y>=0){
                if(map[x][y]==n) return true;
                else if(map[x][y]<n) x++;
                else if(map[x][y]>n) y--;
            }
            return false;
        }
    }

    生成测试数据的代码:

    import java.util.Random;
    
    public class Main_007 {
    
        public static void main(String[] args) {
            
            int x[][]=gen(10,10);
            
            show(x);
            
        }
        
        public static int[][] gen(int n,int m){
            int res[][]=new int[n][m];
            
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    int max=0;
                    if(i-1>=0) max=res[i-1][j];
                    if(j-1>=0) max=Math.max(max,res[i][j-1]);
                    res[i][j]=new Random().nextInt(10)+max+1;
                }
            }
            
            return res;
        }
        
        public static void show(int x[][]){
            for(int i=0;i<x.length;i++){
                for(int j=0;j<x[i].length;j++){
                    System.out.printf("%3d ",x[i][j]);
                }
                System.out.println();
            }
        }
        
    }
  • 相关阅读:
    Exploits Likely Leveraged by Russia’s APT28 in Highly-Targeted Attack
    WAF绕过的一些总结和思考
    PHP SAFE MODE BYPASS
    RAS算法原理
    如何绕过WAF
    360手机助手关于签名校验的分析
    cat 命令详解
    面向对象简介
    APK签名及简单反编译
    面向对象之基本概念 封装、单多继承
  • 原文地址:https://www.cnblogs.com/cc11001100/p/5991601.html
Copyright © 2011-2022 走看看