在一个长度为 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+
分类:
每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库