Java 寻找丢失的数字
丢失的数字 是指在连续的元素流或数组中缺失的数字。在这个部分中,我们将讨论使用Java编程语言寻找丢失数字的各种方法。
数组中丢失数字的例子
丢失数字是指在数组中连续数字序列中缺失的数字。
考虑一个数组;
arr=[1,2,3,4,5,6,8]
在上面的数组中,7缺失,所以7是丢失的数字。
例子2
考虑一个数组;
arr=[1,2,3,4,5,6,7,8,9,11]
在上面的数组arr中,10缺失,所以10是丢失的数字。
现在,我们将讨论使用Java在流中寻找丢失数字的各种方法。
方法1:使用stream()和sum()方法
在这种方法中,我们使用stream()函数将数组转换为流,然后使用 sum() 函数计算流的总和,并将其存储在’实际总和’变量中,然后使用公式 n*(n+1)/2 计算预期总和,然后使用预期总和-实际总和找到丢失的数字。
步骤
- 用一些值初始化一个数组。
-
使用stream()和sum()方法计算数组的总和。
-
计算数组的长度,并使用n项和公式计算连续数字的预期总和。
-
减去预期值和总和,将其赋给一个变量并打印。
Stream() - ‘Stream()’方法用于创建元素流,以便我们可以使用filter()、map()、reduce()等方法处理数据。
Arrays.stream(collection)
sum() - 该方法用于计算集合中所有元素的和。
stream.sum()
示例
在这个例子中,我们将使用stream()和sum()方法来使用Java找到丢失的数字。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 5};
int sum = Arrays.stream(array).sum();
int n = array.length + 1;
int expectedvalue = (n * (n + 1)) / 2;
int lostnumber = expectedvalue - sum;
System.out.println("lost number " + lostnumber);
}
}
输出
lost number 4
方法2:使用异或
在这种方法中,我们计算n个值的异或并存储在expectedValue变量中,然后我们计算实际的异或值,最后我们通过expectedValue和actualValue之间的异或运算来获得丢失的数字。
步骤
- 用一些值初始化数组。
-
计算数组的长度,并加1,因为我们希望实际数组中的数字个数为array.length+1,并将其赋给变量’n’。
-
设置expected value为1,并使用异或运算符在循环中计算期望的值,直到n。
-
将expected value设置为array[0],并使用异或运算符在循环中计算实际值,对于数组中的元素。
-
使用异或运算符在expected value和actual value上计算丢失的数字并打印它。
XOR运算(^) - 异或运算执行按位运算,如果两个位都为1,则返回1,否则返回0。它用符号^表示。
A ^ b // where 'a' and 'b' are integers.
示例
在这个示例中,我们将使用XOR运算符,用Java找到丢失的数字。
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 5}; // input array with missing number
int n = array.length + 1; // total number of elements if no number was missing
int expectedValue = 1; // expected XOR value if no number was missing
for (int i = 2; i <= n; i++) {
expectedValue ^= i; // XOR all elements from 1 to n to get expected value
}
int actualValue = array[0]; // start with first element of array
for (int i = 1; i < array.length; i++) {
actualValue ^= array[i]; // XOR all elements of array to get actual value
}
int lostNumber = expectedValue ^ actualValue; // XOR expected and actual values to get lost number
System.out.println("The lost number is " + lostNumber);
}
}
输出结果
The lost number is 4
方法3:使用HashSet
在这个例子中,我们将使用数据结构HashSet和HashSet的内置方法来使用Java找到缺失的数字。
步骤
- 使用一些值初始化一个数组。
-
创建一个HashSet,并使用for循环来迭代数组并将值添加到HashSet中。
-
使用for循环,迭代 i 到数组长度加1,并使用contains()方法检查集合中的缺失值,然后打印丢失的数字。
HashSet - HashSet是一个无序的对象集合,不允许重复元素。
HashSet<datatype> objName = new HashSet<datatype>();
contains() − 这个方法检查集合中是否存在某个值,并返回一个布尔值。
setObjName.contains(value)
示例
在这种方法中,我们将数组的所有元素存储在HashSet中,然后从1到array.length+1值进行迭代,检查是否所有的值都存在于集合中,如果有任何一个值不存在,则该值就是丢失的数字值,我们打印它。
import java.util.Arrays;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 5};
HashSet<Integer> set = new HashSet<Integer>();
for (int i : array) {
set.add(i);
}
for (int i = 1; i <= array.length + 1; i++) {
if (!set.contains(i)) {
System.out.println("lost number: " + i);
break;
}
}
}
}
输出
lost number: 4
因此,在本文中我们学习了使用Java编程语言找到丢失的数字的不同方法。