Java程序查找丢失的数字
丢失的数字是指在一个连续的流元素或数组中缺失的数字。在本节中,我们将讨论使用Java编程语言查找流中丢失数字的各种方法。
数组中丢失数字的示例
丢失的数字是指数组中连续数字序列中缺失的数字。
示例1
考虑一个数组
arr=[1,2,3,4,5,6,8]
在上面的数组'arr'中,缺少7,所以7是丢失的数字
示例2
考虑一个数组
arr=[1,2,3,4,5,6,7,8,9,11]
在上面的数组'arr'中,缺少10,所以10是丢失的数字
现在,我们将讨论在Java中查找流中丢失数字的各种方法。
方法1:使用stream()和sum()方法
在这种方法中,我们使用stream()方法将数组转换为流,然后使用sum()方法计算流的总和并存储在“actualsum”变量中,然后我们使用公式n*(n+1)/2计算“expectedsum”,然后我们使用expectedsum - actualsum查找丢失的数字。
算法
用一些值初始化一个数组。
使用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变量中,然后我们计算actualValue的异或,最后我们在expectedValue和actualValue之间执行异或运算以获得丢失的数字。
算法
用一些值初始化一个数组。
计算数组的长度并为其加1,因为数组中的实际数字应该是array.length+1,并将其分配给变量'n'。
将expected value设置为1,并使用for循环使用异或运算符计算expected value,直到n。
将expected value设置为array[0],并使用for循环对数组中存在的元素使用异或运算符计算actual value。
使用异或运算符对expected value和actual value进行计算,并打印出丢失的数字
异或运算符 (^) − 异或运算符执行按位运算,如果两个位都为1,则返回1,否则返回0。它由^表示。
a ^ b // where 'a' and 'b' are integers.
示例
在这个例子中,我们将使用异或运算符并使用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到array.length+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编程语言查找丢失数字的不同方法。