zoukankan      html  css  js  c++  java
  • Java实现在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    已知条件:1. 二维数组行数和列数相同; 2. 每一行从左到右,每一列从上到下递增;

    解题思路:选取左下角或右上角的数组元素:1. 选取左下角元素,当 target 大于 左下角元素时,列数加1;当 target 小于左下角元素时,行数减1;2. 选取右上角元素, 当 target 小于右上角元素时,列数减1;当 target 大于右上角元素时,行数加1;以左下角元素为例,代码如下:

     1 import java.util.Scanner;
     2 
     3 public class Solution {
     4     public static void main(String[] args) {
     5         Scanner scanner = new Scanner(System.in);
     6         int n = scanner.nextInt();
     7         int [][] array = new int[n][n];
     8         scanner.nextLine(); 
     9         //用来跳过行列后的回车符
    10         for(int i=0 ; i<n ; i++) {
    11             String [] str = scanner.nextLine().split(" ");
    12             for(int j=0 ; j<str.length ; j++) {
    13                 array[i][j] = Integer.parseInt(str[j]);
    14             }
    15         }
    16         int target = scanner.nextInt();
    17         boolean result = Find(target, array);
    18         System.out.println(result);
    19     }
    20 
    21     public static boolean Find(int target, int [][] array) {
    22         // 解题思路:二维数组每一行和每一列都是递增的,取左下角或右上角的元素与target进行对比
    23         // 以左下角为例
    24         int row = array.length-1;
    25         int col = 0;
    26         while(row >= 0 && col <= array[0].length-1) {
    27             if(array[row][col] == target)
    28                 return true;
    29             else if(array[row][col] > target)
    30                 row--;
    31             else
    32                 col++;
    33         }
    34         return false;
    35     }
    36 }        
  • 相关阅读:
    TC2.0库函数大全
    【转帖】2004年度电影作品盘点之好莱坞篇
    C++文件流读写txt文件
    Linux 使用技巧
    最长字符串匹配算法(KMP算法)
    回调函数
    C#中对XML文件的一些基本操作[转载]
    指针与引用的区别
    中文核心期刊目录
    十大最考验演技的角色
  • 原文地址:https://www.cnblogs.com/maxge/p/12805810.html
Copyright © 2011-2022 走看看