【剑指Offer】数组中重复的数字
发布日期:2021-05-10 05:48:23 浏览次数:26 分类:原创文章

本文共 869 字,大约阅读时间需要 2 分钟。

数组中重复的数字



Leetcode地址:



描述:


在这里插入图片描述


解法:


思路:


因为数字范围在0~n-1,所以可以用数组对应下标和数字对应起来。我这里愿意称它为“桶”。
所以我想的是,就是造个桶来累计每个数字出现的次数;


我的代码:


  public int findRepeatNumber(int[] nums) {
if (nums.length < 2 || nums.length > 100000) {
return -1; } int[] res = new int[nums.length]; for (int num : nums) {
res[num] += 1; if (res[num] > 1) {
return num; } } return -1; }

更巧妙的解法:


和上面比,空间复杂度更低。就是把数组本身当做桶,如果数字的位置不对,放到对应的桶里,如果桶里本身有东西就发现重复。


//置换法  public int findRepeatNumber(int[] nums) {
if (nums.length < 2 || nums.length > 100000) {
return -1; } int temp; for (int i = 0; i < nums.length; i++) {
if (nums[i] == i) {
continue; } if (nums[i] == nums[nums[i]]) {
return nums[i]; } temp = nums[i]; nums[i] = nums[temp]; nums[temp] = temp; } return -1; }
上一篇:【Dubbo】Spring Boot整合Dubbo
下一篇:【设计模式之禅】工厂方法模式

发表评论

最新留言

不错!
[***.144.177.141]2025年04月25日 13时12分30秒