如何在一个1到100的整数数组中找到丢失的数字?

如何在一个1到100的整数数组中找到丢失的数字?


当我拿到这个题目的时候我就想这个是找丢失的数字是一个还是多个数字的情况呢?
如果是一个的情况:
我们可以利用(100+1)*100/10 减去这个数组的所有集合的和,就可以得到。
但如果是多个数据的情况呢?
我当时是这样想的,不是有序数组,我就先进行排序,就得到一个有序的数组。并获取里面的最大数和最小数。
for(int i = 0;i < 100; i++){
if ((i+1) == list[i]){} // 没有丢失
else{}//已经丢失 打印
}

下面是大神的方法 以此记录

Java程序找到缺少的数字
让我们理解问题陈述,我们将1到100的数字放入整数数组中,找出丢失的数字的最佳方法是什么?如果面试官特别提到1到100,那么你可以应用上述关于系列总和的技巧,如下所示。如果它有多个缺少的元素,你可以使用位集合类,当然只有你的面试官允许使用它时。
1)系列之和:公式:n(n + 1)/ 2(但仅适用于一个缺失的数字)
2)如果一个数组有多个缺失元素,则使用BitSet。
我提供了一个BitSet另一个方式的解决方案,用这个很好的实用程序类来介绍。在许多面试中,我向Java开发人员询问了这个类,但是他们中的许多人甚至都没有听说过这个。我认为这个问题是学习如何在Java中使用BitSet的好方法。
顺便说一句,如果你要去面试,那么除了这个问题之外,很好它还知道 : [如何在Java中检查或检测数组中的重复元素] 和 [如何找到整数数组中的第二高数字]。通常情况下,在此之后会将这些问题作为后续问题。

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 

您可以看到使用正确的数据结构如何轻松解决问题。
这就是在这个使用程序找到100个元素数组中的缺失元素。正如我所说,知道这个技巧很好,它只需要你计算数字之和然后从实际总和中减去它,但是如果数组有多个缺失数字你就不能使用它。另一方面,BitSet解决方案更通用,因为您可以使用它在整数数组上查找多个缺失值。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要编写程序出 1 到 100 的所有整数中出现了多少个数字 9,可以按照以下步骤: 1. 创建一个器变量,并将其初始化为 0。 2. 使用循环语句,从 1 循环到 100,对于每一个整数执行以下操作: - 将该整数转换为字符串类型,以便可以逐位检查数字。 - 使用字符串方法 count() 统计字符串中出现的数字 9 的个数。 - 将统计结果加到计器变量中。 3. 循环结束后,计器变量中存储的就是 1 到 100 的所有整数中出现的数字 9 的总个数。 下面是一个 Python 代码示例: ``` count = 0 for i in range(1, 101): count += str(i).count('9') print(count) ``` 运行程序后,输出的结果是 20,即 1 到 100 的所有整数中出现的数字 9 的总个数为 20。 ### 回答2: 题目中要求我们编写程序,一下1到100的所有整数中出现多少个数字9。 我们可以使用循环语句来实现这个程序。首先,我们需要对1到100进行循环,遍历每一个数字。在循环中,我们可以将当前数字转化为字符串类型,然后使用字符串方法count()来统计数字9在字符串中出现的次。 具体实现如下: ```python count = 0 # 统计数字9出现的总次 for i in range(1, 101): num_str = str(i) # 将数字转化为字符串类型 count += num_str.count('9') # 统计数字9在字符串中出现的次 print('1到100的所有整数中,数字9出现的次为:', count) ``` 运行上面的程序,输出结果为: ``` 1到100的所有整数中,数字9出现的次为: 20 ``` 因此,1到100的所有整数中,数字9出现的次为20次。 ### 回答3: 要编写一个程序来一下1到100的所有整数中出现多少个数字9,可以采用以下步骤: 1. 创建一个变量count,并将其初始化为0。 2. 使用for循环从1到100遍历所有整数。 3. 在每次循环中,将当前整数转换为字符串,并使用字符串方法count()来计算数字9在该字符串中出现的次。 4. 将该次添加到计变量count中。 5. 循环结束后,输出count的值,即所有1到100整数数字9出现的总次。 以下是一个Python程序示例: ``` count = 0 for i in range(1, 101): count += str(i).count('9') print("1到100的所有整数数字9出现的总次为:", count) ``` 程序输出结果为: ``` 1到100的所有整数数字9出现的总次为: 20 ``` 因此,在1到100的所有整数数字9出现的总次为20次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值