您的位置:首页 > 其它

数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间

2013-08-16 08:39 639 查看
数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间

1、题目中要求我们不能使用额外的空间,那么我们能采用在原数组上做文章,这里的重点是如何对相同元素进行标记

2、本文转自:/article/4683885.html

算法思想是对数组的前N-1个元素进行标记,在标记过程中如果发现此位置已被标记,那么说明此时的元素值是重复的,于是打印出来

int[] arr = {1,4,2,1,6,7,8,3,9,4,3,1,5,7,2,9};
foreach (int t in arr)
{
if(arr[Math.Abs(t)]>0)
{
arr[Math.Abs(t)] = -arr[Math.Abs(t)];
}
else
{
Console.WriteLine(Math.Abs(t).ToString());

}
}


3、以上代码能够满足面试题目的要求,没有产生额外的空间,时间复杂度为O(m+n),但是会打印出重复的数字,期待有缘人看到这篇随笔之后能提出更好的解决意见和方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐