如何在 1 到 100 的整数数组中查找缺失的数字

文章介绍了如何使用Java和C#等编程语言在数组中寻找缺失的数字,特别是在1到100的范围内。提供了两种方法:一是利用序列总和公式解决单个缺失数问题,二是使用BitSet处理多个缺失数的情况。这些技巧常在科技公司的面试中出现,特别是针对大学毕业生的招聘。
摘要由CSDN通过智能技术生成

用 Java、C# 或任何其他语言编写一个程序来查找数组中缺失的数字;取决于您选择的语言。这种不仅在小型初创企业中被问到,而且在谷歌、亚马逊、Facebook、微软等一些最大的科技公司中也会被问到,主要是在他们访问知名大学校园招聘毕业生时。这个问题最简单的版本是在 100 个整数区域中找到缺失的元素,其中包含 1 到 100 之间的数字

 。 

这可以通过使用n(n+1)/2计算系列的总和轻松解决,这也是最快和有效的方法之一,但如果数组包含多个缺失数字或如果该数组包含重复项。

在排序数组中,您可以比较一个数字是否等于预期的下一个数字。或者,您也可以使用Java中的BitSet解决了这个问题。

让我们理解问题陈述,我们将 1 到 100 的数字放入一个整数数组中,找出缺少哪个数字的最佳方法是什么?如果面试官特别提到 1 到 100,那么您也可以应用上述关于序列总和的技巧,如下所示。如果缺少一个以上的元素,您可以使用BitSet类,当然前提是您的面试官允许。

1) 级数之和:公式:n (n+1)/2(但只适用于一个缺失数)
2)如果一个数组有多个缺失元素,则使用BitSet 。

import java.util.Arrays;
import java.util.BitSet;
 
/**
 * Java program to find missing elements in a Integer array containing 
 * numbers from 1 to 100.
 *
 * @author Javin Paul
 */
public class MissingNumberInArray {
 
    public static void main(String args[]) {

        // one missing number
        printMissingNumber(new int[]{1, 2, 3, 4, 6}, 6);
 
        // two missing number
        printMissingNumber(new int[]{1, 2, 3, 4, 6, 7, 9, 8, 10}, 10);
 
        // three missing number
        printMissingNumber(new int[]{1, 2, 3, 4, 6, 9, 8}, 10);
 
        // four missing number
        printMissingNumber(new int[]{1, 2, 3, 4, 9, 8}, 10);
 
        // Only one missing number in array
        int[] iArray = new int[]{1, 2, 3, 5};
        int missing = getMissingNumber(iArray, 5);
        System.out.printf("Missing number in array %s is %d %n", 
                           Arrays.toString(iArray), missing);
    }
   /**
    * A general method to find missing values from an integer array in Java.
    * This method will work even if array has more than one missing element.
    */
    private static void printMissingNumber(int[] numbers, int count) {
        int missingCount = count - numbers.length;
        BitSet bitSet = new BitSet(count);
 
        for (int number : numbers) {
            bitSet.set(number - 1);
        }
 
        System.out.printf("Missing numbers in integer array %s, with total number %d is %n",
        Arrays.toString(numbers), count);
        int lastMissingIndex = 0;

        for (int i = 0; i < missingCount; i++) {
            lastMissingIndex = bitSet.nextClearBit(lastMissingIndex);
            System.out.println(++lastMissingIndex);
        }
 
    }
   /**
    * Java method to find missing number in array of size n containing
    * numbers from 1 to n only.
    * can be used to find missing elements on integer array of 
    * numbers from 1 to 100 or 1 - 1000
    */
    private static int getMissingNumber(int[] numbers, int totalCount) {
        int expectedSum = totalCount * ((totalCount + 1) / 2);
        int actualSum = 0;
        for (int i : numbers) {
            actualSum += i;
        }
 
        return expectedSum - actualSum;
    }
 
}
Output
Missing numbers in integer array [1, 2, 3, 4, 6], with total number 6 is
5
Missing numbers in integer array [1, 2, 3, 4, 6, 7, 9, 8, 10], with total number 10 is
5
Missing numbers in integer array [1, 2, 3, 4, 6, 9, 8], with total number 10 is
5
7
10
Missing numbers in integer array [1, 2, 3, 4, 9, 8], with total number 10 is
5
6
7
10
Missing number in array [1, 2, 3, 5] is 4

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Axing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值