题目: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 } }
相关推荐
标题 "1-n中缺失2个数字,O(n)时间内找出它们" 描述的是一个经典的算法问题,它要求在已排序的数组(从1到n,但缺失了两个数字)中,找出这两个缺失的数字,而目标是在线性时间复杂度O(n)内完成。这个问题在计算机...
标题 "0到n-1缺失的数字1" 描述了一个经典的算法问题,它源自LeetCode平台,要求在给定的数组中找到一个缺失的、在0到n-1范围内的整数。这个问题主要考察的是数组处理和逻辑推理能力。下面我们将深入探讨这个问题的...
该问题涉及到了编程和概率统计的知识,主要是一个关于找出缺失数据的问题。具体来说,这是一个使用Python编程解决的LeetCode题目。下面将详细解释这个题目及其解题思路。 首先,题目描述了一个情境,即有一系列六面...
在给定的编程题目“缺失的数字(排序+一次遍历)1”中,目标是找到一个数组`nums`中缺失的那个整数,数组包含了从0到n的其他所有整数,其中n是数组的长度。这是一个经典的数学与算法问题,可以使用多种方法解决,而...
【寻找缺失的整数1】这个问题是一个经典的数学与算法结合的问题,主要目标是在给定的未排序序列中找出缺失的那个整数。这个问题的关键在于利用数列的性质来优化搜索算法,从而达到线性时间复杂度O(n)。 1. 问题背景...
然后将 `cur` 加 1,继续查找下一个可能的缺失数。 - 如果 `cur` 等于 `arr[i]`,那么 `cur` 已经被包含在数组中,我们需要跳过这个数,将 `i` 加 1 并同时将 `cur` 加 1。 4. 当遍历完数组 `arr` 后,如果 `k` ...
- 由于我们只需要找出第一个缺失的正数,可以只存储已经出现的正数,而不必考虑所有可能的位置。因此,我们可以使用一个较小的哈希表或数组,仅存储遇到的正整数。 - 当遍历到正整数i时,若i <= n,将其添加到哈希...
例如,1, 5, 9, 13...,其中每一项与前一项的差是4,这是一个公差为4的等差数列。 2. **通项公式**:等差数列的通项公式是`a_n = a_1 + (n - 1)d`,其中`a_n`是第n项,`a_1`是第一项,d是公差,n是项数。 3. **找...
如果给定一个数字n,它的相邻数是n-1和n+1。例如,对于数字5,它的相邻数是4和6。 2. 练习题解析: - 第一部分"学一学",通过例子2比1多1,2比3少1,解释了相邻数的关系,即一个数比它的前一个数多1,比它的后一个...
该问题要求我们实现一个算法,找出数组中缺失的第一个正整数,且数组中可能包含负数、零以及重复的数字。 解决这个问题的方法有多种,这里我们可以探讨一种常见的解决方案,即使用哈希表。首先,我们可以遍历整个...
这表明我们要用Python语言来处理一个涉及到n个数和m个数选取的问题。 在提供的代码中,首先通过`input()`函数获取用户输入的五项参数:M(缺失的数字数量),X(左侧最小的数),Y(右侧最大的数),P(和的下限)...
1. 数据结构:首先,我们需要一个合适的数据结构来存储学生的信息。一个简单的选择是使用列表,每个元素代表一个学生,其中每个学生的信息可以再封装在一个字典里,包含姓名、学号等个人信息以及对应的科目成绩。 2...
标题中的“行业分类-设备装置-具有IL33N端结构域缺失的鼠炎症模型”表明这是一项关于医学研究或生物技术的专题,具体聚焦在使用设备装置来研究小鼠炎症模型,特别是涉及到IL33N端结构域的缺失情况。IL33,全称为...
这是一个关于填充矩阵的问题,目标是使1到N²的所有数字在N×N的矩阵中按照某种规则分布。通常,这种问题可以通过螺旋填充或对角线填充等方法解决。这里的要求可能是指行优先或列优先的递增填充,或者是一种特定的...
假设我们有一个已排序的整数数组`nums`,包含了从`1`到`n`的整数,但其中缺少了一些数字。我们的任务是找出并返回所有这些缺失的数字。哈希表在这里的作用就是快速地判断一个数字是否存在于数组中。 以下是解决这个...
目标是找出所有在1到n范围内但未在数组中出现的数字。 描述中提到的示例输入是[4,3,2,7,8,2,3,1],对应的输出应为[5,6],因为5和6是1到8这个范围内未在数组中出现的数字。 首先,我们可以看到这个问题的标签是...
数据处理中的缺失数据填充是一个关键问题,特别是在大数据分析和挖掘中。缺失数据的出现可能由于各种原因,如信息获取的限制、人为遗漏或是属性值不存在。处理缺失数据的方法大致分为删除、填充和抛弃,其中填充是最...
- **目标**:给定一个包含从1到N所有整数但缺失了两个数字的数组,要求找到这两个缺失的数字。 - **约束条件**: - 数组长度为N-2。 - 要求时间复杂度为O(N)。 - 要求空间复杂度为O(1)。 - **示例**: - 示例1:...
根据这一规律,下一个数应该是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. **植树问题的应用**...
1. **缺失翻译检测**:i18n-tasks可以扫描代码库,找出尚未被翻译的字符串,这些通常是由于新添加的功能或更新的文本导致的。 2. **未使用翻译清理**:有时,代码中的一些翻译可能不再被引用,i18n-tasks可以找出...