首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 300. Longest Increasing Subsequence (Tag:Binary Search)

LeetCode 300. Longest Increasing Subsequence (Tag:Binary Search)

作者头像
用户7447819
发布2021-07-23 11:18:46
发布2021-07-23 11:18:46
3310
举报
文章被收录于专栏:面试指北面试指北

1. 问题描述

Given an unsorted array of integers, find the length of longest increasing subsequence.

Example:

Input: [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.

翻译过来就是:给定一个输入的数组,返回递增的最大子序列的值。不要求子序列是连续的。

2. 解题思路

  • 定义一个数组dp,用于存储当前扫描到的递增的数据
  • len用于表示当前的递增子序列的长度
  • 遍历数组
    • 使用二分查找法在dp中查找数据,确定数据的位置。
    • Arrays.binarySearch 返回的是查到的数据的坐标。若坐标为负值,则表示找不到数据,-7 表示 找不到数据,7 = dp数组的长度+1.
    • 在dp数组中放入数据
    • 若查到的数据的位置等于数组的dp的长度,表示子序列扩容,len自增1。
  • 返回len。

3. 代码

代码语言:javascript
复制
class Solution {
   public int lengthOfLIS(int[] nums) {
       if (nums == null || nums.length == 0) {
           return 0;
       }
       int[] dp = new int[nums.length];
       int len = 0;
       for (int num : nums) {
           int i = Arrays.binarySearch(dp, 0, len, num);
           
           if (i < 0) {
               i = -(i + 1);
           }
           dp[i] = num;
           if(i == len) {
               len++;
           }
       }
       return len;
   }}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面试指北 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 问题描述
  • 2. 解题思路
  • 3. 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档