数组中重复的数字
数组中重复的数字
https://www.nowcoder.com/practice/623a5ac0ea5b4e5f95552655361ae0a8?tpId=13&&tqId=11203&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
利用HashSet去判断第一个重复的数字
public boolean duplicate(int numbers[],int length,int [] duplication) { if(length < 2) return false; Set<Integer> set = new HashSet<>(); for(int i = 0; i < length; i++){ if(set.contains(numbers[i])){ duplication[0] = numbers[i]; return true; } set.add(numbers[i]); } return false; }
二刷新思路
class Solution { /** 用上了 《nums 里的所有数字都在 0~n-1 的范围内》 这个条件 使得 nums数组中对应下标放的是对应相等的数字,eg:nums[1] = 1, nums[2] = 2 按照上面的做法将每个位置的数字归为,当碰到要归位的那个位置已经是正确的时候,此时就找到相同的数字了 eg: nums[1] = 5, nums[5] = 5,此时要将nums[1] = 5,归位到nums[5]中,但是nums[5]中的数字已经是正确的了 **/ public int findRepeatNumber(int[] nums) { int left = 0; while(left < nums.length){ if(nums[left] == left) left++; else if(nums[nums[left]] == nums[left]) return nums[left]; else { int tmp = nums[nums[left]]; nums[nums[left]] = nums[left]; nums[left] = tmp; } } return 0; } }
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~