美文网首页
二维有序数组求给定数的位置

二维有序数组求给定数的位置

作者: 西5d | 来源:发表于2018-04-04 10:12 被阅读13次

一个二维数组,求给定的元素的位置,这个数组有个特性,是从左到右递增,每行首个从上到下递增,一种是从头开始遍历,另一种根据给定的特性,可以从每行最右侧的元素开始比较,如果小于给定元素,则向下一行找,如果大于给定元素,则从当前行尾元素往行首找,如果相等则返回结果。

现假设数组大小为m , n ,注意java里基本类型int是传值的,因此在获得位置的时候,获得结果需要按引用传值。最开始想当然打算用Integer,但是Integer其实内部是final 的基本类型值,一旦生成无法修改,所以这里用了一个HashMap去记录对应的结果。如下代码:

public class ForIndexClazz {
    public static void main(String[] args) {
        int[][] arr = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {4, 5, 6, 9, 10}, {7, 8, 9, 16, 18}};
        Map<String, Integer> map = new HashMap<>();
        map.put("m", 5);
        map.put("n", 4);
        indexFor(arr, map, 1);

        int m = map.get("m"), n = map.get("n");
        if (m != 5 || n != 4) {
            System.out.println("index:[" + n + "," + m + "]");
        } else {
            System.out.println("not found");
        }
    }

    public static void indexFor(int[][] arr, Map<String, Integer> map, int key) {
        int m = map.get("m"), n = map.get("n");
       
        for (int i = 0; i < n; i++) {
            for (int j = m - 1; j >= 0; j--) {
                if (arr[i][j] == key) {
                    map.put("m", j);
                    map.put("n", i);
                    return;
                } else if (arr[i][j] < key) {
                    break;
                }
            }
        }
    }
}

相关文章

  • 二维有序数组求给定数的位置

    一个二维数组,求给定的元素的位置,这个数组有个特性,是从左到右递增,每行首个从上到下递增,一种是从头开始遍历,另一...

  • 每天一道算法题10

    【二维有序数组找num】在行也有序,列也有序的二维数组中,找num,找到返回true,否则返回false。解答:这...

  • 算法题

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

  • 第五章 数组

    1.求二维数组的鞍点【问题描述】找出一个二维数组(以三行四列的数组为例)中的鞍点,即该位置上的元素在该行上值最大,...

  • 算法

    有序数组求并集

  • Day12

    一. 二维数组 定义所谓的二维数组就是在数组中存放数组外层数组中存储的是数组的引用 初始化静态初始化先指定数组中的...

  • 牛客JS题目练习

    1、找出元素 item 在给定数组 arr 中的位置 2、计算给定数组 arr 中所有元素的总和 3、移除数组 a...

  • 递归方法判断数组中的元素是不是有序

    问题:给定一个数组,请用递归方法判定数组中的元素是不是有序。分析:如果数组中只有一个元素,直接返回1表示有序

  • Objective-C插入排序

    插入排序(从大到小排列)### 插入排序的算法思路是:假定数组的0位置是已经排列好的,是有序的。然后从1位置开始和...

  • Java 数组

    Java 数组 定义 数组是固定长度的、存储相同类型变量的有序集合 声明数组 创建数组 即指定数组的大小,为数组开...

网友评论

      本文标题:二维有序数组求给定数的位置

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