2021-12-19:找到所有数组中消失的数字。 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums
2021-12-19:找到所有数组中消失的数字。
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
力扣448。
答案2021-12-19:
下标循环怼。争取i位置放i+1。
时间复杂度:O(N)。
额外空间复杂度:O(1)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
nums := []int{4, 3, 2, 7, 8, 2, 3, 1}
ret := findDisappearedNumbers(nums)
fmt.Println(ret)
}
func findDisappearedNumbers(nums []int) []int {
ans := make([]int, 0)
if len(nums) == 0 {
return ans
}
N := len(nums)
for i := 0; i < N; i++ {
// 从i位置出发,去玩下标循环怼
walk(nums, i)
}
for i := 0; i < N; i++ {
if nums[i] != i+1 {
ans = append(ans, i+1)
}
}
return ans
}
func walk(nums []int, i int) {
for nums[i] != i+1 { // 不断从i发货
nexti := nums[i] - 1
if nums[nexti] == nexti+1 {
break
}
nums[i], nums[nexti] = nums[nexti], nums[i]
}
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具