随笔 - 57,  文章 - 0,  评论 - 25,  阅读 - 26624

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

限制:

2 <= n <= 100000

解1:数组排序,循环判断相邻值是否相同

复制代码
 static int FindRepeatNumber3(int[] nums)
        {
            var arr=nums.OrderBy(x => x).ToArray();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i]==arr[i+1])
                {
                    return arr[i];
                }
            }
            return 0;
        }
复制代码

解2:创建一个集合/哈希表来存储数字,同样利用循环,第一次出现就会添加进集合/哈希表,但是第二次出现就会抛出

ps:哈希表添加数据的时候比集合快,emm,自己也是查了一下才知道,还要多学习啊   也不知道为啥,自己实际跑代码发现list集合比哈希表还快

复制代码
        static int FindRepeatNumber2(int[] nums)
        {
            //哈希表
            HashSet<int> arr = new HashSet<int>();
            //集合
            //List<int> list = new List<int>();
            for (int i = 0; i < nums.Length; i++)
            {
                if (arr.Contains(nums[i]))
                {
                    return nums[i];
                }
                else
                {
                    arr.Add(nums[i]);   
                }
            }
            return 0;
        }
复制代码

解3:数据字典。操作类似哈希表,但是速度较慢,就不贴代码了。

这里我用的是StopWatch来测试的代码运行时间.最优选择是

List集合>HashSet>OrderBy>Dictionary<>

List:0-2毫秒

HashSet:3-7毫秒

OrderBy:33-48毫秒

Dictionary:1000+

 

posted on   尝尝手指  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示