我在接受微软采访时遇到了这个问题.
给定一个随机整数数组,在C中编写一个算法,删除重复的数字并返回原始数组中的唯一数字.
例如输入:{4, 8, 4, 1, 1, 2, 9} 输出:{4, 8, 1, 2, 9, ?, ?}
需要注意的是,预期的算法不应该首先对数组进行排序.当一个元素被移除后,以下元素也必须向前移动.无论如何,元素尾部元素向前移动的元素值可以忽略不计.
更新:必须在原始数组中返回结果,并且不应使用辅助数据结构(例如哈希表).但是,我想订单保存不是必需的.
更新2:对于那些想知道为什么这些不切实际的约束的人来说,这是一个面试问题,在思考过程中讨论所有这些约束,看看我如何能够提出不同的想法.
我最近在某个地方遇到过一个问题:
假设您有一个1001整数的数组.整数是随机顺序,但您知道每个整数在1到1000之间(包括1和1000).此外,每个数字在数组中只出现一次,但一个数字除外,它出现两次.假设您只能访问数组的每个元素一次.描述一个算法来查找重复的数字.如果您在算法中使用了辅助存储,是否可以找到不需要它的算法?
我感兴趣的是第二部分,即不使用辅助存储.你有什么主意吗?
有人愿意使用Functional Programming和Elixir Constructs为List(X)中的重复值提供一些替代解决方案吗?
X = [1,26,3,40,5,6,6,7] # the 6 being the duplicate
Run Code Online (Sandbox Code Playgroud)
我想到的用于解决此问题的库存解决方案是迭代列表(X),并添加到新的列表(Y),其中密钥尚不存在.
谢谢
我有这样的数组元素:
int arr[] = {1,1,2,2,3,3,4,4};
Run Code Online (Sandbox Code Playgroud)
我想从中删除重复的元素.在互联网上搜索并了解了ArrayUtil类.你可以通过告诉它的用法来帮助我 - 这就是我如何在输出中获得这样的数组:
arr[] = {1,2,3,4};
Run Code Online (Sandbox Code Playgroud) 我有两个非常大的整数数组,每个数组的大小约为100万.我必须找到两个数组中都存在的第一个整数.
我尝试用套装做到这一点.
(1)同时遍历每个数组并将两个数组的元素插入集合中.
(2)每当集合拒绝接受这是第一个交叉点.
int Solution(int A[], int B[])
{
Set s = new HashSet();
for (int i = 0 ; ; i++)
{
if ( i < A.length )
{
if( !s.Add(A[i]) )
System.out.println(A[i]);
}
if ( i < B.length )
{
if( !s.Add(B[i]) )
System.out.println(B[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们能否改进此解决方案以减少时间复杂度?
谢谢
给定一个A[]包含n整数的未排序数组,如何创建一个算法来返回最常出现的元素?
我想你需要一种方法来计算元素出现的次数.我只能想出一个O(n 2)实现.我知道我需要首先使用排序算法,但如果我使用合并排序,那已经是O(n logn)的总运行时间了.我只对数据进行了排序,我不能在不进一步增加运行时的情况下查看元素.
问题是找到一组实数的每个元素的频率.
double[] a = new double[n]
int[] freq = new int[n]
Run Code Online (Sandbox Code Playgroud)
我想出了两个解决方案:
第一个解决方案O(n ^ 2):
for (int i = 0; i < a.length; i++) {
if (freq[i] != -1) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
freq[i]++;
freq[j] = -1;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二个解决方案O(nlogn):
quickSort(a, 0, a.length - 1);
freq[j] = 1;
for (int i = 0; i < a.length - 1; i++) {
if (a[i] == a[i …Run Code Online (Sandbox Code Playgroud) 嗯试图通过python检查整数列表中是否存在重复值.这是成功的,我发现当列表的大小增加时执行时间越来越长.我怎样才能改善以下逻辑的运行时间?
def containsDuplicate( nums):
if len(nums) < 2:
return False
cnt = 0
flag = False
length = len(nums)
while cnt < length:
p = cnt + 1
while p < length:
if nums[cnt] == nums[p]:
flag = True
break
p += 1
cnt += 1
return flag
Run Code Online (Sandbox Code Playgroud)