leetcode41

 1 package main
 2 
 3 import (
 4     "fmt"
 5 )
 6 
 7 func firstMissingPositive(nums []int) int {
 8     m := make(map[int]int)
 9     for a := 0; a < len(nums); a++ {
10         if nums[a] > 0 {
11             _, ok := m[nums[a]]
12             if ok == false {
13                 m[nums[a]] = nums[a]
14             }
15         }
16     }
17     i := 1
18     _, ok := m[i]
19     for ok {
20         i = i + 1
21         _, ok := m[i]
22         if ok == false {
23             break
24         }
25     }
26     return i
27 }
28 func main() {
29     var n []int
30     n = append(n, 7)
31     n = append(n, 8)
32     n = append(n, 9)
33     n = append(n, 11)
34     n = append(n, 12)
35     r := firstMissingPositive(n)
36     fmt.Println(r)
37 }

 

第一次遍历:用一个map记录所有出现过的值,这里忽略掉所有非正数(小于等于0的)。

第二次遍历:从1开始,判断是否在map中,如果在map中继续判断下一个数字,一直到第一个不在字典中的值,则为所求。

17-25行是想写个do while,但是感觉怪怪的。

复杂的算法虽好但是想多了容易掉头发,有时性能不够可以用语言和硬件改善嘛。以人为本,珍爱生命,远离强迫症。

转载于:https://www.cnblogs.com/asenyang/p/10491948.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值