动态规划+二分查找,状态转移公式跟普通的有所不同,用tail数组维护当前最长的公共子序列,如果arr[i]>当前tail[len-1],则tail[len++]=arr[i],dp[i]=len; 如果不成立,则通过二分查找到最小的大于等于arr[i]的位置,插入arr[i](这样才可以保证后面的序列尽可能长),此时注意更新dp[i]为index+1,而不是len。最后通过逆向遍历的方式就可以找到符合题意的最长上升子序列 import java.util.*; public class Solution { &...