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();
            }
        }
        
    }
  • 相关阅读:
    ASP.NET- 查找Repeater控件中嵌套的控件
    Oracle- 表的管理
    Oracle- PL/SQL DEV工具的使用收集
    Oracle- PL/SQL DEV的远程配置
    Oracle- 提示查询结果不可更新,请使用...更新结果。
    Oracle- 存储过程和异常捕捉
    MSSQLSERVER数据库- SP_EXECUTESQL的使用
    Oracle- 用户管理
    Oracle- 初识
    c语言交换两个变量的值
  • 原文地址:https://www.cnblogs.com/cc11001100/p/5991601.html
Copyright © 2011-2022 走看看