美文网首页
二维数组中的查找

二维数组中的查找

作者: 65f1a3abfb76 | 来源:发表于2017-07-11 12:13 被阅读0次

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

思路描述:一个数字的下方和右方是比它本身大的区域,而左方和上方时比它本身小的区域。选取右上角的数字进行比较,当该数大于指定的数时,舍去该列,当该数小于指定的数时,舍去该行,当相等时,则表示找到

C语言实现:

#include<stdio.h>
#include<stdlib.h>

typedef unsigned int boolean;
#define MAX 4
#define TRUE  1
#define FALSE -1

void showAry(int ary[MAX][MAX]);
boolean find(int ary[MAX][MAX], int rows, int cols, int number);

void showAry(int ary[MAX][MAX]) {
    int i = 0, j = 0;
    for(; i < MAX; i++) {
        j = 0;
        for(; j < MAX; j++) {
            printf("%d ", ary[i][j]);
        }
    }
}

boolean find(int ary[MAX][MAX], int rows, int cols, int number) {
    int i = 0, 
        j = cols - 1,
        n = 0;
    boolean result = FALSE;
    
    if(ary == NULL || rows <= 0 || cols <= 0) {
        return result;
    }
    
    while(i < rows && j >= 0) {
        n = ary[i][j];
        if(number == n) {
            printf("\nary[%d, %d] = %d\n", i, j, n);
            result = TRUE;
            break;  
        }else if(number < n) {
            j -= 1; 
        }else if(number > n) {
            i += 1;
        }
    }
    return result;
}

//1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15
int main() {
    int ary[MAX][MAX];
    int i = 0, j = 0;
    
    for(; i < MAX; i++) {
        j = 0;
        for(; j < MAX; j++) {
            scanf("%d", &ary[i][j]);
        }
    }
    showAry(ary);
    find(ary, MAX, MAX, 7);
}

Java实现

import java.util.Scanner;

public class FindInArray {
    private int [][]ary;
    
    public FindInArray(int [][]ary) {
        this.ary = ary;
    }
    
    public boolean find(int rows, int cols, int target) {
            int i = 0, 
                j = cols - 1,
                n = 0;
            boolean result = false;
            
            if(ary == null || rows <= 0 || cols <= 0) {
                return result;
            }
            
            while(i < rows && j >= 0) {
                n = ary[i][j];
                if(target == n) {
                    System.out.println("ary["+ i + "]" + "[" + j + "] = " + ary[i][j]);
                    result = true;
                    break;  
                }else if(target < n) {
                    j -= 1; 
                }else if(target > n) {
                    i += 1;
                }
            }
            return result;
    }

    public static void main(String[] args) {
        int [][]ary = new int[4][4];
        int i, j;
        Scanner input = new Scanner(System.in);
        
        for(i = 0; i < 4; i++)  {
            j = 0;
            for(j = 0; j < 4; j++) {
                ary[i][j] = input.nextInt();
            }
        }       
        
        for(i = 0; i < 4; i++) {
            for(j = 0; j < 4; j++) {
                System.out.println(ary[i][j]);
            }
        }
        
        FindInArray instance = new FindInArray(ary);
        instance.find(4, 4, 7);
    }
}

相关文章

  • 算法题

    行列都是有序的二维数组,查找k是否存在【查找法】 二维数组中的查找(行列分别有序数组的二分查找)【递归法】 快速排...

  • 剑指Offer二维数组查找

    剑指Offer二维数组查找 二维数组查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到...

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • 《剑指offer》(一)-二维数组中的查找(java)

    数组--二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序...

  • 刷题-数组专项

    数组 二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

  • 二维数组中的查找(Javascript编程) function Find(target, array){ // w...

  • 牛客网高频算法题系列-BM18-二维数组中的查找

    牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),...

  • 数组——二维数组中查找

    一、题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下...

  • LeetCode 每日一题 [39] 二维数组中的查找

    LeetCode 二维数组中的查找 [简单] 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序...

  • 剑指offer(Java版)day01:二维数组中的查找|替换空

    1二维数组中的查找 【题目】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

网友评论

      本文标题:二维数组中的查找

      本文链接:https://www.haomeiwen.com/subject/hzophxtx.html