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

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

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

    2、本文转自:http://www.cnblogs.com/end/archive/2012/02/04/2337796.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),但是会打印出重复的数字,期待有缘人看到这篇随笔之后能提出更好的解决意见和方法

  • 相关阅读:
    网络流模型之二分图匹配问题
    省选测试8
    省选测试9
    省选测试7
    省选测试6
    网络流最大流、最小割学习笔记
    kruskal重构树学习笔记
    省选测试5
    Python 打包成exe 方式
    JQuery
  • 原文地址:https://www.cnblogs.com/chenyongblog/p/3261265.html
Copyright © 2011-2022 走看看