首页 > 其他 > 详细

leetcode-300

时间:2020-03-15 09:05:17      阅读:59      评论:0      收藏:0      [点我收藏+]

此题两个思路,动态规划,二分+贪心,实际上动态规划对于数据量极小的来讲不存在优先考虑的场景,测试也发现并不乐观。

 

package leetcode

func lengthOfLIS(nums []int) int {
    if nums == nil || len(nums) == 0 {
        return 0
    }
    m := 1
    d := make([]int, len(nums))
    d[0] = 1
    for i := 1; i < len(nums); i++ {
        for j := 0; j < i; j++ {
            cur := 1
            if nums[i] > nums[j] {
                cur = d[j] + 1
            }
            d[i] = max(d[i], cur)
        }
        m = max(m, d[i])
    }
    return m
}

func max(a, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

func lengthOfLISBinarySearch(nums []int) int {
    if nums == nil || len(nums) == 0 {
        return 0
    }
    d := make([]int, len(nums))
    length := 0
    for _, v := range nums {
        i := binartSearchInsertPosition(d, length, v)
        d[i] = v
        if i == length {
            length++
        }
    }
    return length
}

func binartSearchInsertPosition(d []int, len int, x int) int {
    low, high := 0, len-1
    for low <= high {
        mid := low + (high - low) / 2
        if x < d[mid] {
            high = mid - 1
        } else if x > d[mid] {
            low = mid + 1
        } else {
            return mid
        }
    }
    return low
}

 

end

leetcode-300

原文:https://www.cnblogs.com/CherryTab/p/12495374.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!