6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目

448找到所有数组中消失的数字.go
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
示例 2:
输入:nums = [1,1]
输出:[2]
提示:
n == nums.length
1 <= n <= 105
1 <= nums[i] <= n
进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

解法

package main

import "fmt"

// 448找到所有数组中消失的数字.go
// 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
// 示例 1:
// 输入:nums = [4,3,2,7,8,2,3,1]
// 输出:[5,6]
// 示例 2:
// 输入:nums = [1,1]
// 输出:[2]
// 提示:
// n == nums.length
// 1 <= n <= 105
// 1 <= nums[i] <= n
// 进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

// 使用 map 非常简单,但不满足进阶
func findDisappearedNumbers1(nums []int) []int {
	slice := make([]int, 0)
	mp := make(map[int]bool, len(nums))
	for _, val := range nums {
		mp[val] = true
	}
	for i := 1; i <= len(nums); i++ {
		if _, ok := mp[i]; !ok {
			slice = append(slice, i)
		}
	}
	return slice
}

// 1. 范围为1到n,
// 2. 将每个数-1取模, 如果按顺序就得到该值应该在的index处, 将该index处的值+n, 那么在该范围的值都应该大于n
// 3. 此时我们找出值小于n的index, 即为缺失的数字
// 时间复杂的O(n) 空间复杂度O(1)
func findDisappearedNumbers(nums []int) []int {
	var rst []int
	n := len(nums)
	for i := 0; i < n; i++ {
		idx := (nums[i] - 1) % n
		nums[idx] = nums[idx] + n
	}
	for i := 0; i < n; i++ {
		if nums[i] <= n { // 因为n也可能缺失,所以是小于等于
			rst = append(rst, i+1) // 该坐标值+1 就是该值, 因为是1到n,而坐标从0开始
		}
	}
	return rst
}

func main() {
	nums := []int{4, 3, 2, 7, 8, 2, 3, 1}
	fmt.Println(findDisappearedNumbers(nums))
}

相关推荐

  1. Leetcode 448. 找到所有数组消失数字

    2024-06-13 21:14:03       40 阅读
  2. 448. 找到所有数组消失数字

    2024-06-13 21:14:03       23 阅读
  3. LeetCode第四天(448. 找到所有数组消失数字

    2024-06-13 21:14:03       32 阅读
  4. [leetcode] 2269. 找到一个数字 K 美丽值

    2024-06-13 21:14:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 21:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 21:14:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 21:14:03       82 阅读
  4. Python语言-面向对象

    2024-06-13 21:14:03       91 阅读

热门阅读

  1. 序列化和反序列化

    2024-06-13 21:14:03       34 阅读
  2. 如何提高MySQL DELETE 速度

    2024-06-13 21:14:03       35 阅读
  3. upan量产的知识(来自2011年)

    2024-06-13 21:14:03       32 阅读
  4. ios CCAutoDisappearView.m

    2024-06-13 21:14:03       28 阅读
  5. winhttp劫持dll

    2024-06-13 21:14:03       26 阅读
  6. 赚流量卷,晚点删

    2024-06-13 21:14:03       38 阅读
  7. A.计算圆周率——无穷级数法

    2024-06-13 21:14:03       30 阅读
  8. 【一个 Android 反编译神器jadx】

    2024-06-13 21:14:03       36 阅读
  9. 热门开源项目推荐:技术与地址概览

    2024-06-13 21:14:03       37 阅读