Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找到元素重置之前的编号_Java_Arrays_Algorithm - Fatal编程技术网

Java 找到元素重置之前的编号

Java 找到元素重置之前的编号,java,arrays,algorithm,Java,Arrays,Algorithm,给定任意大小的数组,在本例中,数组大小为5 此数组包含1到5之间的所有数字(必须包含所有数字) 现在,一个元素被重置并设置为0,任务是找到它在变为0之前的数字 所以我有一个简单的解决方案: 解释:首先,从1到5循环,创建一个内部循环,检查第一个循环中的i是否存在于整个数组中,如果它不存在,这意味着它是0之前的值,因为数组包含从1到5或1到100的所有数字(无所谓)还有一个元素 代码: 从数学上讲,这真的很容易。有没有一种方法可以在编程语言中像数学上一样简单地实现这一点? 你能想出更好的算法来解决

给定任意大小的数组,在本例中,数组大小为5

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

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

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

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

代码:

从数学上讲,这真的很容易。有没有一种方法可以在编程语言中像数学上一样简单地实现这一点?
你能想出更好的算法来解决这个问题吗?

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

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);
}
publicstaticvoidmain(字符串[]args)引发异常{
整数和=15;
int[]数字=新的int[]{1,2,3,4,5};
数字[4]=0;
for(int i=0;i
结果:

五,


还有一种可能性,你可以使用HashMaps! 那么,您不必遍历任何“for循环”

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


每件事都是在O(1)复杂度和O(n)复杂度的最坏情况下完成的。

您是否确定了一个重置的数字?您提到的总和对于设置为零的数字非常有效。你实际上是在减去那个元素。显然,这只适用于将单个数字元素替换为0。如果您只是将数学伪代码转换为普通代码,则只需计算预先预期的总和(数组大小*(数组大小+1)/2),然后循环遍历数组,将所有值相加。如果我没弄错的话,这应该是O(N)?数组总是从1开始的连续数字吗?@Amit.rk3从1开始的是最佳情况是
O(1)
,但平均情况和最坏情况仍然是
O(N)
。此外,问题表明,您得到了一个数组。您的解决方案需要将数组值映射到HashMap中。所以它比单for循环更糟糕。@Synergist是的
    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);
}