用c# 采用BIT-map 方式,从一堆数据中,找出不重复的




采用的是bit-map算法,关于什么是bit-map,百度一下;

直接上一段代码,用C#改写的!

如下:

 class Program
    {
        private static int[] flags = new int[1000000];
        private static DateTime starttime = new DateTime();
        private static int  get_val( int idx)
        {
            int i = idx/4;
            int j = idx%4;
            int ret = (flags[i]&(0x3<<(2*j)))>>(2*j);  
  
            return ret;
        }


        private static int set_val(int idx,int val) 
        {
            int i = idx / 4;
            int j = idx % 4;
            int tmp = (flags[i] & ~((0x3 << (2 * j)) & 0xff)) | (((val % 4) << (2 * j)) & 0xff);
            flags[i] = tmp;
            return 0;
        }


        private static int add_one(int idx)
        {
            if (get_val(idx) >=2 )
            {
                return 1;
            }
            else
            {
                set_val(idx,get_val(idx)+1);
                return 0;
            }
        }


        
        static void Main(string[] args)
        {
            int[] value={10,5,392,49,24,0,95,20,9098,20340,900934,290390,5,95,20340,29039,5};
            Console.WriteLine("原数组!");
            foreach (int item in value)
            {
                Console.Write(item+" ");
                add_one(item);
            }
            Console.WriteLine("\n\n只出现过一次的数是:");
            starttime = DateTime.Now;
            for (int i = 0; i < 1000000; ++i)
            {
                if (get_val(i)==1)
                {
                    Console.WriteLine(i);
                }
            }
            string processTimet = ExecDateDiff(starttime, DateTime.Now);
            Console.WriteLine("共用时{0}",processTimet);
             


            Console.Read();
        }
        /// <summary>
        /// 计算两个时间之间的差值。
        /// </summary>
        /// <param name="dateBegin"></param>
        /// <param name="dateEnd"></param>
        /// <returns></returns>
        public static string ExecDateDiff(DateTime dateBegin, DateTime dateEnd)
        {
            TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
            TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
            TimeSpan ts3 = ts1.Subtract(ts2).Duration();
            //你想转的格式
            return ts3.TotalMilliseconds.ToString() + "毫秒";
        }
    }



运行结果如下:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值