zoukankan      html  css  js  c++  java
  • leetcode刷题笔记300题 最长上升子序列

    leetcode刷题笔记300题 最长上升子序列

    源地址:300. 最长上升子序列

    问题描述:

    给定一个无序的整数数组,找到其中最长上升子序列的长度。

    示例:

    输入: [10,9,2,5,3,7,101,18]
    输出: 4
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
    说明:

    可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
    你算法的时间复杂度应该为 O(n2) 。
    进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?

    //通过一次遍历,构建单调增的序列,对于比末尾值大的值直接添加到末尾,对于小于头部的值,直接替换头部的值,对于中间的值,通过二分查找寻找其的位置
    object Solution {
        def lengthOfLIS(nums: Array[Int]): Int = {
            val len = nums.length
            val list = scala.collection.mutable.ListBuffer[Int]()
    
            for (num <- nums) {
                if (list.length == 0 || num > list.last) list.append(num)
                else{
                        if (num <= list(0)) list(0) = num
                    else{
                        var left = 0
                        var right = list.length-1
                        while (left < right){
                            val mid = (left + right + 1) >> 1
                            if (list(mid) < num) left = mid
                            else right = mid - 1
                        }
                        list(right+1) = num
                    }
                }
            }      
            return list.length
        }
    }
    
    func lengthOfLIS(nums []int) int {
        var res = []int{}
    
        for _ , num := range nums {
            if len(res) == 0 ||res[len(res)-1] < num {
                res = append(res, num)
            } else {
                if num <= res[0] {
                    res[0] = num
                } else {
                    left, right := 0, len(res)-1
                    for (left < right) {
                        mid := (left + right + 1) >> 1
                        if num > res[mid] {
                            left = mid
                        } else {
                            right = mid - 1
                        }
                    }
                    res[right+1] = num
                }
            }
        }
        return len(res)
    }
    
  • 相关阅读:
    不透明度
    浮动塌陷
    滑动门技术
    文本替换
    清除浮动
    浮动
    定位概述
    IE6中使用通用选择器模拟子选择器效果
    js对象
    bzoj:2049: [Sdoi2008]Cave 洞穴勘测
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/14023151.html
Copyright © 2011-2022 走看看