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

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

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
}

提交结果:

相关文章
|
8月前
|
Java
每日一题《剑指offer》数组篇之数组中重复的数字
每日一题《剑指offer》数组篇之数组中重复的数字
63 0
每日一题《剑指offer》数组篇之数组中重复的数字
|
8月前
剑指Offer 面试题03. 数组中重复的数字
剑指Offer 面试题03. 数组中重复的数字
37 0
剑指offer-2.不修改数组找出重复的数字
剑指offer-2.不修改数组找出重复的数字
59 0
LeetCode-442 数组中重复的数据
LeetCode-442 数组中重复的数据
每日一题——删除有序链表中重复的元素——I
每日一题——删除有序链表中重复的元素——I
|
C++
剑指Offer - 面试题3:数组中重复的数字
剑指Offer - 面试题3:数组中重复的数字
75 0
剑指offer 02. 不修改数组找出重复的数字
剑指offer 02. 不修改数组找出重复的数字
68 0
|
算法 索引
leetcode(442)数组中重复的数据
给定一个长度为n的数组nums,数组nums[1,n]内出现的重复的元素,请你找出所有出现两次的整数,并以数组形式返回,你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
110 0
leetcode(442)数组中重复的数据
|
算法
LeetCode每日一题(19)——数组中重复的数据
数组中重复的数据 1.题目 2.示例 3.思路 4.代码
|
算法
LeetCode——442. 数组中重复的数据
LeetCode——442. 数组中重复的数据
98 0