题解 | #最长上升子序列(二)#
最长上升子序列(二)
https://www.nowcoder.com/practice/4af96fa010c44638a7e112abf65f7237
* 很重要,必须要会
* eg:arr={1, 3, 6, 7, 9, 4, 10, 5, 6}
* --------0 1 2 3 4 5 6 7 8
* 初始时:end[0]=arr[0]=1,R=0(R可以认为是end有效的范围内的长度-1)
* 从下标为1开始遍历
* i=1
* 从0~0(即0~R)通过二分查找,从end数组中找到比arr[1]小的最右侧位置+1,明显是下标为1,更新值为end={1,3},R=1
* i=2
* 从0~1(即0~R)通过二分查找,从end数组中找到比arr[2]小的最右侧位置+1,明显是下标为2,更新值为end={1,3,6},R=2
* i=3
* 从0~2(即0~R)通过二分查找,从end数组中找到比arr[3]小的最右侧位置+1,明显是下标为3,更新值为end={1,3,6,7},R=3
* i=4
* 从0~3(即0~R)通过二分查找,从end数组中找到比arr[4]小的最右侧位置+1,明显是下标为4,更新值为end={1,3,6,7,9},R=4
* i=5
* 从0~4(即0~R)通过二分查找,从end数组中找到比arr[5]=4小的最右侧位置+1,明显是下标为3,更新值为end={1,3,4,7,9},R=4
* i=6
* 从0~4(即0~R)通过二分查找,从end数组中找到比arr[6]=10小的最右侧位置+1,明显是下标为5,更新值为end={1,3,4,7,9,10},R=5
* i=7
* 从0~5(即0~R)通过二分查找,从end数组中找到比arr[7]=5小的最右侧位置+1,明显是下标为3,更新值为end={1,3,4,5,9,10},R=5
* i=8
* 从0~5(即0~R)通过二分查找,从end数组中找到比arr[8]=6小的最右侧位置+1,明显是下标为4,更新值为end={1,3,4,5,6,10},R=5
* 那么答案就是 R+1;