`
MouseLearnJava
  • 浏览: 466216 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

找出1到n缺失的一个数

阅读更多

题目:Problem description:  You have an array A of size n – 1 containing numbers from 1 to n so there is one missing number, find it!

 

本文给出解决上述问题的两个方法。

方法一:求和然后相减

在这个方法中,首先求出1到n的和,可以使用数学公式int total = (n * (n + 1)) / 2;,然后求出给定数组中所有元素的和,两个值的差就是缺失的那个数。程序如下:

public class FindMissingNumber {
 
    public int findMethod1(int[] array, int n) {
        int total = (n * (n + 1)) / 2;
        int sum = 0;
        for (int i = 0, len = array.length; i < len; i++){
            sum += array[i];
        }
 
        return total - sum;
    }
}

 

方法二:使用异或实现

在该方法中,先要知道异或的特性:

	 A B | A XOR B
	 0 0 | 0
	 0 1 | 1
	 1 0 | 1
	 1 1 | 0

根据该特性,将会有如下的结果:

A ^ 0 = A
A ^ A = 0
A ^ B = C
C ^ A = B

所以,可以先将1到n做异或操作,得到的值再与给定数组中的所有元素进行异或操作,最后得到的那个数字就是缺失的那个数字。

基于这个思想,程序如下:

/**
 * A B | A XOR B
 * 0 0 | 0
 * 0 1 | 1
 * 1 0 | 1
 * 1 1 | 0
 * 
 * @param array
 * @param n
 * @return
 */
public int findMethod2(int[] array, int n) {
    int result = 0;
    for(int i = 1; i <= n; i++){
        result ^= i;
    }
         
    for(int i = 0, len = array.length; i < len;  i++){
        result ^= array[i];
    }
     
    return result;
}

 

测试程序和结果如下

public class FindMissingNumberTest {
    public static void main(String[] args) {
        FindMissingNumber finder = new FindMissingNumber();
        int[] array = {1,2,3,4,6,7,8};//missing 5
        System.out.println(finder.findMethod1(array, 8));//5
        System.out.println(finder.findMethod2(array, 8));//5
    }
 
}

 

原文地址 http://thecodesample.com/?p=930

更多代码 http://thecodesample.com/

0
0
分享到:
评论

相关推荐

    1-n中缺失2个数字,O(n)时间内找出它们

    标题 "1-n中缺失2个数字,O(n)时间内找出它们" 描述的是一个经典的算法问题,它要求在已排序的数组(从1到n,但缺失了两个数字)中,找出这两个缺失的数字,而目标是在线性时间复杂度O(n)内完成。这个问题在计算机...

    0到n-1缺失的数字1

    标题 "0到n-1缺失的数字1" 描述了一个经典的算法问题,它源自LeetCode平台,要求在给定的数组中找到一个缺失的、在0到n-1范围内的整数。这个问题主要考察的是数组处理和逻辑推理能力。下面我们将深入探讨这个问题的...

    找出缺失的观测数据(python)1

    该问题涉及到了编程和概率统计的知识,主要是一个关于找出缺失数据的问题。具体来说,这是一个使用Python编程解决的LeetCode题目。下面将详细解释这个题目及其解题思路。 首先,题目描述了一个情境,即有一系列六面...

    缺失的数字(排序+一次遍历)1

    在给定的编程题目“缺失的数字(排序+一次遍历)1”中,目标是找到一个数组`nums`中缺失的那个整数,数组包含了从0到n的其他所有整数,其中n是数组的长度。这是一个经典的数学与算法问题,可以使用多种方法解决,而...

    寻找缺失的整数1

    【寻找缺失的整数1】这个问题是一个经典的数学与算法结合的问题,主要目标是在给定的未排序序列中找出缺失的那个整数。这个问题的关键在于利用数列的性质来优化搜索算法,从而达到线性时间复杂度O(n)。 1. 问题背景...

    第 k 个缺失的正整数1

    然后将 `cur` 加 1,继续查找下一个可能的缺失数。 - 如果 `cur` 等于 `arr[i]`,那么 `cur` 已经被包含在数组中,我们需要跳过这个数,将 `i` 加 1 并同时将 `cur` 加 1。 4. 当遍历完数组 `arr` 后,如果 `k` ...

    java-leetcode题解之第41题缺失的第一个正数.zip

    - 由于我们只需要找出第一个缺失的正数,可以只存储已经出现的正数,而不必考虑所有可能的位置。因此,我们可以使用一个较小的哈希表或数组,仅存储遇到的正整数。 - 当遍历到正整数i时,若i &lt;= n,将其添加到哈希...

    找出数字的排列规律.doc

    例如,1, 5, 9, 13...,其中每一项与前一项的差是4,这是一个公差为4的等差数列。 2. **通项公式**:等差数列的通项公式是`a_n = a_1 + (n - 1)d`,其中`a_n`是第n项,`a_1`是第一项,d是公差,n是项数。 3. **找...

    1到10的相邻数的练习题.doc

    如果给定一个数字n,它的相邻数是n-1和n+1。例如,对于数字5,它的相邻数是4和6。 2. 练习题解析: - 第一部分"学一学",通过例子2比1多1,2比3少1,解释了相邻数的关系,即一个数比它的前一个数多1,比它的后一个...

    python-leetcode面试题解之第41题缺失的第一个正数-python题解.zip

    该问题要求我们实现一个算法,找出数组中缺失的第一个正整数,且数组中可能包含负数、零以及重复的数字。 解决这个问题的方法有多种,这里我们可以探讨一种常见的解决方案,即使用哈希表。首先,我们可以遍历整个...

    python实现n个数中选出m个数的方法

    这表明我们要用Python语言来处理一个涉及到n个数和m个数选取的问题。 在提供的代码中,首先通过`input()`函数获取用户输入的五项参数:M(缺失的数字数量),X(左侧最小的数),Y(右侧最大的数),P(和的下限)...

    输入N个学生的个人信息和成绩,然后按平均成绩的降序排列

    1. 数据结构:首先,我们需要一个合适的数据结构来存储学生的信息。一个简单的选择是使用列表,每个元素代表一个学生,其中每个学生的信息可以再封装在一个字典里,包含姓名、学号等个人信息以及对应的科目成绩。 2...

    行业分类-设备装置-具有IL33N端结构域缺失的鼠炎症模型.zip

    标题中的“行业分类-设备装置-具有IL33N端结构域缺失的鼠炎症模型”表明这是一项关于医学研究或生物技术的专题,具体聚焦在使用设备装置来研究小鼠炎症模型,特别是涉及到IL33N端结构域的缺失情况。IL33,全称为...

    NOIP1995普及组_复赛试题1

    这是一个关于填充矩阵的问题,目标是使1到N²的所有数字在N×N的矩阵中按照某种规则分布。通常,这种问题可以通过螺旋填充或对角线填充等方法解决。这里的要求可能是指行优先或列优先的递增填充,或者是一种特定的...

    c语言面试题之哈希表找到所有数组中消失的数字.zip

    假设我们有一个已排序的整数数组`nums`,包含了从`1`到`n`的整数,但其中缺少了一些数字。我们的任务是找出并返回所有这些缺失的数字。哈希表在这里的作用就是快速地判断一个数字是否存在于数组中。 以下是解决这个...

    找到所有数组中消失的数字(桶排序+索引映射遍历)1

    目标是找出所有在1到n范围内但未在数组中出现的数字。 描述中提到的示例输入是[4,3,2,7,8,2,3,1],对应的输出应为[5,6],因为5和6是1到8这个范围内未在数组中出现的数字。 首先,我们可以看到这个问题的标签是...

    数据处理中缺失数据填充方法的研究.pdf

    数据处理中的缺失数据填充是一个关键问题,特别是在大数据分析和挖掘中。缺失数据的出现可能由于各种原因,如信息获取的限制、人为遗漏或是属性值不存在。处理缺失数据的方法大致分为删除、填充和抛弃,其中填充是最...

    面试题 消失的两个数字.pdf

    - **目标**:给定一个包含从1到N所有整数但缺失了两个数字的数组,要求找到这两个缺失的数字。 - **约束条件**: - 数组长度为N-2。 - 要求时间复杂度为O(N)。 - 要求空间复杂度为O(1)。 - **示例**: - 示例1:...

    小升初数学专项练习 数与代数(1).doc

    根据这一规律,下一个数应该是0+1+2+3+4+5=15,之后的一个数则是0+1+2+3+4+5+6=21,但题目已经给出了21,所以接下来应该是0+1+2+3+4+5+6+7=28。 ### 知识点六:植树问题的应用 #### 解析: 6. **植树问题的应用**...

    Ruby-i18ntasks可以帮助您找到并管理缺失和未使用的翻译

    1. **缺失翻译检测**:i18n-tasks可以扫描代码库,找出尚未被翻译的字符串,这些通常是由于新添加的功能或更新的文本导致的。 2. **未使用翻译清理**:有时,代码中的一些翻译可能不再被引用,i18n-tasks可以找出...

Global site tag (gtag.js) - Google Analytics