相关疑难解决方法(0)

找到一个不是40亿个给定值的整数

这是一个面试问题:

给定一个包含40亿个整数的输入文件,提供一个算法来生成一个未包含在文件中的整数.假设您有1 GB内存.如果您只有10 MB内存,请跟进您的操作.

我的分析:

文件大小为4×10 9 ×4字节= 16 GB.

我们可以进行外部排序,因此我们可以了解整数的范围.我的问题是在排序的大整数集中检测缺失整数的最佳方法是什么?

我的理解(阅读完所有答案后):

假设我们正在讨论32位整数.有2 ^ 32 = 4*10 9个不同的整数.

情况1:我们有1 GB = 1*10 9*8位= 80亿位内存.解决方案:如果我们使用一个代表一个不同整数的位,那就足够了.我们不需要排序.执行:

int radix = 8;
byte[] bitfield = new byte[0xffffffff/radix];
void F() throws FileNotFoundException{
    Scanner in = new Scanner(new FileReader("a.txt"));
    while(in.hasNextInt()){
        int n = in.nextInt();
        bitfield[n/radix] |= (1 << (n%radix));
    }

    for(int i = 0; i< bitfield.lenght; i++){
        for(int j =0; j<radix; j++){
            if( (bitfield[i] & (1<<j)) == 0) System.out.print(i*radix+j);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

情况2:10 MB内存= …

algorithm search file out-of-memory memory-limit

682
推荐指数
24
解决办法
11万
查看次数

如何在混洗连续整数数组中找到重复元素?

我最近在某个地方遇到过一个问题:

假设您有一个1001整数的数组.整数是随机顺序,但您知道每个整数在1到1000之间(包括1和1000).此外,每个数字在数组中只出现一次,但一个数字除外,它出现两次.假设您只能访问数组的每个元素一次.描述一个算法来查找重复的数字.如果您在算法中使用了辅助存储,是否可以找到不需要它的算法?

我感兴趣的是第二部分,即不使用辅助存储.你有什么主意吗?

arrays algorithm duplicates

72
推荐指数
6
解决办法
6万
查看次数

如何在数组中找到不会出现两次的唯一数字

以下内容来自求职面试:

在包含整数的给定数组中,除了一个数字之外,每个数字重复一次,不重复.编写一个函数,查找不重复的数字.

我想过使用HashSet,但它可能会使一切变得复杂......

任何简单解决方案的想法?

java arrays algorithm

56
推荐指数
4
解决办法
3万
查看次数

找到数组中唯一的未配对元素

埃森哲面试问题:

您已经获得了一个大小数组,2n+1其中包含n一对整数(可以是+ve,-ve0)和一个不成对的元素.

你怎么会找到不成对的元素?

对意味着重复.所以(3,3)是一对和(3,-3)不是一对.

algorithm

53
推荐指数
1
解决办法
1万
查看次数

在数组中只出现一次的数字

可能重复:
在列表中查找单个数字

给定一组数字,除了一个数字,所有其他数字,出现两次.什么算法应该找到在数组中只出现一次的那个数字?

a[1..n] = [1,2,3,4,3,1,2] 
Run Code Online (Sandbox Code Playgroud)

应该返回4

algorithm

15
推荐指数
2
解决办法
1万
查看次数

当其他数字出现两次以上时,在列表中查找单个数字

查找列表中的单个数字扩展了该问题

如果我将问题扩展到这个问题:找到一个在列表中只出现一次的数字的最佳算法是什么?所有其他数字恰好出现k次?

有没有人有好的答案?

例如,A = {1,2,3,4,2,3,1,2,1,3},在这种情况下,k = 3.如何在O(n)中得到单个数字"4"时间和空间复杂度是O(1)?

algorithm

6
推荐指数
1
解决办法
1172
查看次数

找到成对或三元组中单个数字的最佳方法

因为这是一系列问题中的一个问题.我正在修改它以使其不与其他的重复.谢谢你的帮助.

:我有一个整数数组.在数组中,除了一个元素外,每个元素都会出现两次.我想找到那个单号.

示例:[2, 4, 2, 1, 4, 1, 3],单个数字是3.

我的想法是使用a HashMap,这需要O(n)时间和O(n)空间.还有更好的解决方案吗?谢谢.

三元:每个元素出现三次,除了一个.找一个单一的.

示例:[1, 2, 4, 2, 4, 1, 2, 4, 1, 3],单个数字是3.

algorithm

6
推荐指数
1
解决办法
120
查看次数

在数组中查找不成对的数字

我有一个数组,其中除了一个重复所有元素:

int[] a={2,6,6,2,4,1,4};
Run Code Online (Sandbox Code Playgroud)

如何找到未配对的元素整数?

java arrays

4
推荐指数
1
解决办法
5028
查看次数

在数组中查找奇数项(没有对)的算法?

可能重复:
在列表中查找单个数字

给定一个整数数组的好算法,除了其中一个整数出现偶数次之外,找到一个出现奇数次的整数.

或许像二进制搜索一样的东西,比如2个n/2大小的小数组的所有元素,比较递归找出来?

编辑:

这个XOR算法实际上是假设{1,1,4,4,7,7,5,8,8,9,9}吗?我的输入也可以是randmon - {1,4,1,8,9,5,4,5,9,8}.那么这种情况下逻辑会发生变化吗?

algorithm

2
推荐指数
2
解决办法
5235
查看次数

这段代码如何工作?

您将获得一个包含正整数的数组.除了一个整数之外,所有整数都会出现偶数次.找到这个特殊的整数.

方案:

具有奇数出现次数的整数将具有0对或更多对以及一个单个数.所以,如果我们能够如何摆脱所有对,那么我们剩下的就是单个数字.什么摆脱对?提示:想想一个运营商.

异或会做到这一点.它为您提供O(n)解决方案,没有额外的内存.

int GetSpecialOne(int[] array, int length)
{
int specialOne = array[0];

for(int i=1; i < length; i++)
{
specialOne ^= array[i];
}
return specialOne;
}
Run Code Online (Sandbox Code Playgroud)

c arrays

2
推荐指数
1
解决办法
205
查看次数

在数组中查找特殊数字

数组中有许多数字,除了出现一次的一个特殊数字外,每个数字出现三次.这是一个问题:如何在数组中找到特殊数字?
现在我只能提出一些基数排序和快速排序的方法,这些方法无法利用问题的性质.所以我需要一些其他的算法.
谢谢你的帮助.

algorithm collections

2
推荐指数
1
解决办法
3338
查看次数

线性时间,常数空间算法,用于查找列表中出现1次的元素

给定n个整数的列表,其中列表中的每个整数都存在两次,除了一个元素,它在列表中存在一次.例如,

[1 3 3 6 2 7 1 2 7]
Run Code Online (Sandbox Code Playgroud)

我需要找到一个线性时间O(n)和一个常量空间O(1)算法,它返回列表中存在一次的元素.在上面的示例中,算法应返回6.请注意,列表不是由任何特定顺序提供的.(列表中元素的顺序是随机的).

我可以使用字典在O(n)线性时间内解决这个问题但不幸的是字典需要O(n)空间.有任何想法吗?

algorithm constants list time-complexity space-complexity

1
推荐指数
1
解决办法
1199
查看次数