从上面的代码我们能看出时间复杂度是O(N^2^)
双指针优化
在某些情况下,根据题目要求,j下标并不需要从i+1重新往后枚举一遍,而是跟随着i向后移动,j也向后移动
?
...由于j坐标不会向左移动,所以整个枚举的复杂度是O(N)
例1
给定N个整数A1,A2,...,AN,以及一个正整数k。问在所有的大于等于k的两个数的差(Ai-Aj)中,最小的差是多少?...伪代码如下:
for X = p,p-1,p-2,...,0
if 能凑出 (x,x + 1,x + 2,......如果需要的百搭卡数量超过M,那这个顺子就凑不出来,伪代码如下:
Hashtable <- [A1,A2,...,AN]
need_card = 0
for i = X,X + 1,......,X+K)
优化2
第二个可以优化的地方就是判断能不能凑出X开头的顺子。我们利用双指针可以把这一步均摊时间复杂度降到O(1)。