找到元素重置前的数字

时间:2015-06-10 17:59:12

标签: java arrays algorithm

给定一个任何大小的数组,在我的例子中,数组大小 5

此数组包含1到5之间的所有数字(必须包含所有数字)

[1 | 2 | 3 | 4 | 5]
 0   1   2   3   4

现在,一个元素被重置并设置为 0 ,任务是找到它在0变为之前的数字。

所以我有这个简单的解决方案:

解释:首先,从1到5循环,创建一个内部循环来检查整个数组中是否存在第一个循环的i,如果它不存在,这意味着它是0之前的值,因为数组包含从1到5或1到100的所有数字(无关紧要),并且有一个休息元素。

代码:

    int[] numbers = new int[]{1, 2, 3, 4, 5};
    numbers[1] = 0;

    int lost = -1;

    loop: 
    for (int i = 1; i <= numbers.length; i++) {
        for (int j = 0; j < numbers.length; j++) {
            if (numbers[j] == i) {
                continue loop;
            }
        }
        lost = i;
        break loop;
    }

    System.out.println(lost);

这个解决方案并不坏,但我认为有更好的解决方案,更稳定。

在我们的例子中,我在数学上考虑过它:

1 + x + 3 + 4 + 5 = 15
x = 2

数学上,这很容易。有没有一种方法可以在编程语言中完成,就像在数学上一样简单? 你能想到什么更好的算法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

这适用于重置的一个元素。只需从总和中减去每个剩余的元素,剩下的就是元素在重置之前的前一个数字。

for (int i = 0; i < row; ++i)
    for (int j = 0; j < col; ++j)
        matrix[i][j] = B.matrix[i][j];

结果:

  

5

答案 1 :(得分:0)

还有一种可能性,你可以使用HashMaps! 你不必遍历任何“for loops”。

您可以使用Hashmaps检查“0”键是否有任何值,如果是,则将某个数字重置为0。 然后,您可以遍历Hashmap并比较缺少​​的值。

一切都完成O(1)复杂性和O(n)复杂性的最坏情况。