每日一题——数组中重复的数据

简介: 每日一题——数组中重复的数据

442. 数组中重复的数据

题目描述:

给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

题解:

func findDuplicates(nums []int) []int {
  // 先排序,时间复杂度为O(n)
  sort.Ints(nums)
  // 准备一个指针,下面用到
  count := 0
  for count < len(nums) {
    // 当计数器来到最后一个元素,直接移除即可(这里不懂的话,结合下面的if理解)
    // 如果最后一个元素存在重复,那么肯定在上一个元素的时候就进入了下面的else,count肯定指向最后一个元素的
    // 所以只要count来到最后一位,那么一定是单独的元素。
    if count == len(nums)-1 {
      nums = nums[0:count]
      break
    }
    // 因为 nums 中的每个元素出现 一次 或 两次
    // 所以排序后,若下一个元素不等于自己,说明自己是单独的,直接移除
    if nums[count] != nums[count+1] {
      nums = append(nums[0:count], nums[count+1:]...)
    } else { // 而如果下一个等于自己,说明自己是有重复的,移除一个,留下一个,计数器+1,
      nums = append(nums[0:count], nums[count+1:]...)
      count = count + 1
    }
  }
  return nums
}

提交结果:

相关文章
|
6天前
|
Java
每日一题《剑指offer》数组篇之数组中重复的数字
每日一题《剑指offer》数组篇之数组中重复的数字
39 0
每日一题《剑指offer》数组篇之数组中重复的数字
|
6天前
|
算法 Java
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
34 0
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
|
6天前
剑指Offer 面试题03. 数组中重复的数字
剑指Offer 面试题03. 数组中重复的数字
25 0
|
8月前
剑指offer-2.不修改数组找出重复的数字
剑指offer-2.不修改数组找出重复的数字
24 0
|
8月前
剑指offer-1.找出数组中重复的数字
剑指offer-1.找出数组中重复的数字
15 0
|
9月前
|
算法
LeetCode-442 数组中重复的数据
LeetCode-442 数组中重复的数据
|
11月前
|
C++
剑指Offer - 面试题3:数组中重复的数字
剑指Offer - 面试题3:数组中重复的数字
53 0
|
11月前
剑指offer 02. 不修改数组找出重复的数字
剑指offer 02. 不修改数组找出重复的数字
47 0
|
11月前
|
C++
剑指offer 01. 找出数组中重复的数字
剑指offer 01. 找出数组中重复的数字
35 0
|
算法
LeetCode每日一题(19)——数组中重复的数据
数组中重复的数据 1.题目 2.示例 3.思路 4.代码