• a_lc_缺失的第一个整数 I~II(暴力 / 不断放到正确位置)


    I

    O(n),差在没有利用有序的条件

    func missingNumber(A []int) int {
        n := len(A)
        for i := 0; i < n; i++ {
            for (A[i]>=0 && A[i]<n && A[A[i]] != A[i]) {
                A[A[i]], A[i] = A[i], A[A[i]]
            }
        }
        for i := 0; i < n; i++ {
            if (i != A[i]) {
                return i
            }
        }
        return n
    }
    

    O(logn)

    func missingNumber(A []int) int {
        n := len(A)
        l, r := 0, n-1
        for (l < r) {
            m := (l+r)/2
            if (A[m] != m) {
                r = m
            } else {
                l = m + 1 //A[m]=m,证明[0..m]这一段都是连续的
            }
        }
        if (l == n-1 && A[l] == l) { //特判[0,1,2]这种,应返回3
            return l+1
        } 
        return l
    }
    

    II

    给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。O(n)+O(1)

    排序

    func firstMissingPositive(A []int) int {
    	n := len(A)
    	sort.Ints(A)
    	for i := 1; i <= n; i++ {	
    	    idx := sort.SearchInts(A, i) //返回理想的插入位置
    	    if (idx >= n || A[idx] != i) {
    	        return i
    	    }
    	}
    	return n+1
    }
    

    O(n)

    func firstMissingPositive(A []int) int {
        n := len(A)
        for i := 0; i < n; i++ {
            for (0<A[i] && A[i]<=n && A[i]!=A[A[i]-1]) { //只要A[i]没在合法位置,我就一直将A[i]交换到A[A[i]-1]上,除非A[i]不合法
                A[A[i]-1], A[i] = A[i], A[A[i]-1]
            }
        }
        for i := 0; i < n; i++ {
            if (i+1 != A[i]) {
                return i+1
            }
        }
        return n+1
    }
    
  • 相关阅读:
    Redux
    版本控制(.git + .svn + SourceTree)
    前端埋点
    前端IDE:VSCode + WebStorm
    浏览器
    Mutation Observer
    函数节流与函数去抖
    React 初识
    Ajax
    JS
  • 原文地址:https://www.cnblogs.com/wdt1/p/14350377.html
Copyright © 2020-2023  润新知