golang力扣leetcode 442.数组中重复的数据

简介: golang力扣leetcode 442.数组中重复的数据

442.数组中重复的数据

442.数组中重复的数据

题解

题目:给一个数组,返回数组中出现两次的数,数是1-n的,并且只出现一次或两次,要求常数的时间复杂度

思路:

1.数组下标0~n-1   数值大小1-n
2.如果v出现过,把v-1下标处的值置为负数
3.如果v-1下标处的值本来就是负数,说明v这个值是第二次遍历到了
4.将v添加到答案中

代码

func findDuplicates(nums []int) (ans []int) {
  for i := 0; i < len(nums); i++ {
    v := abs(nums[i])
    if nums[v-1] < 0 {
      ans = append(ans, v)
    } else {
      nums[v-1] *= -1
    }
  }
  return
}
func abs(i int) int {
  if i < 0 {
    return -i
  }
  return i
}
目录
相关文章
|
11天前
|
存储 C语言
Leetcode—— 删除排序数组中的重复项——C语言
Leetcode—— 删除排序数组中的重复项——C语言
|
11天前
|
算法 C语言
Leetcode----旋转数组 ------C语言篇
Leetcode----旋转数组 ------C语言篇
|
18天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
18 1
|
6天前
|
索引
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
11 0
|
8天前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
16 1
|
10天前
|
存储 算法
【数据结构与算法 | 基础篇】[数组专题]力扣88
【数据结构与算法 | 基础篇】[数组专题]力扣88
|
12天前
力扣2834. 找出美丽数组的最小和
力扣2834. 找出美丽数组的最小和
|
12天前
力扣421. 数组中两个数的最大异或值(字典树)
力扣421. 数组中两个数的最大异或值(字典树)
|
12天前
|
机器学习/深度学习 canal NoSQL
从C语言到C++_12(string相关OJ题)(leetcode力扣)
从C语言到C++_12(string相关OJ题)(leetcode力扣)
23 0
|
18天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
9 0
http://www.vxiaotou.com