11.4:大于2倍问题
11.4:大于2倍问题
[ 6 7 1 3 2]
每个数num,问num右边 有多少个数满足 :num > 右*2
6; 1 和 2; 6 > 右侧有2个数 [ 1 2 ] 乘以2
7; 1、3和2; 7 > 右侧有3个数 [1 2 3 ] 乘以2
1; 1 > 右侧有0个数 [ ] 乘以2
3; 3 > 右侧有0个数 [ ] 乘以2
2; 2 > 右侧有0个数 [ ] 乘以2
例:
[ 1 4 6 8 9 | 1 1 2 3 3 4 ]
p r
注意:p和r都是不回退的;
比如:
p指向1的时候,右侧的数*2都大于1的,r往右滑,滑不动,括了0个数[]
[ 1 4 6 8 9 | 1 1 2 3 3 4 ]
p r
p指向4的时候,右侧有1 和1 两个数*2小于4的满足题意,r往右滑,滑到1和2之间,r括了[1 1]
[ 1 4 6 8 9 | 1 1 2 3 3 4 ]
p r
p指向6的时候,右侧有2 这个数*2小于6的满足题意,r往右滑,滑到2和3之间,r括了[1 1 2]
[ 1 4 6 8 9 | 1 1 2 3 3 4 ]
p r
p指向8的时候,r继续往右侧滑,滑到3和4之间,r括了[1 1 2 3 3 ]
[ 1 4 6 8 9 | 1 1 2 3 3 4 ]
p r
1、递归分组
2、在merge的时候:
一、p指针从0~m逐个走一遍;
二、p每走一格,判断右侧r指针往后走几个数,判断规则arr[p] > arr[r]*2;
注意r每次不必复位到M+1位置