java - 在元素重置之前找到它曾经是什么数字

标签 java arrays algorithm

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

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

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

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

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

解释:首先,从1循环到5,创建一个内循环,检查第一个循环的i是否存在于整个数组中,如果不存在' t 存在,这意味着它是 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

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

最佳答案

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

public static void main(String[] args) throws Exception {
    int sum = 15;
    int[] numbers = new int[] { 1, 2, 3, 4, 5 };

    numbers[4] = 0;
    for (int i = 0; i < numbers.length; i++) {
        sum -= numbers[i];
    }
    System.out.println(sum);
}

结果:

5

关于java - 在元素重置之前找到它曾经是什么数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763877/

相关文章:

c++ - 冒泡排序忽略数组的第一个元素

arrays - Swift 中解析 block 的基础知识

arrays - 你将如何在 Swift 中创建一个具有 n 维的多维数组?

algorithm - 如何在3d空间中使用Prims算法

java - 一种三维数据结构,用于保存项目之间的位置关系

java - 输出无法在 java 中找到或加载主类

java - Firebase 连接不可用 Android Studio 3.2

java - 尝试将 JDBC 与 Eclipse : Unsupported major. 次要版本 51.0 一起使用

c# - Lat 长顶点的顺序列表以在 C# 中形成多边形

java - 解码字符串有多少种方法?