这一步是有什么用,为什么<k,就i++

img


这一步有什么用,为什么<k就i++,大于等于k就j--呢hdhjdjd

因为数组是升序排列的,i从小到达递增,j从大到小递减。如果a[i]+a[j] <k,那么说明数组值要增大才可能等于k,所以只能是i增大啊。反之,就需要j减小。

你要结合题目来看呀,一段代码是为了解决一个问题,你抛开了问题看代码当然是毫无意义
就像下水井盖盖在井上是为了防止人掉井里,放地上就多此一举
光看代码我是没看出来它到底想解决什么问题,只知道i是头,j是尾,然后从两头往中间试,看a[i]+a[j]是否等于k
但是感觉这算法应该是错的

你要看原始题目啊,代码出于逻辑,逻辑根据需求。连需求都不看直接倒推代码,那只能是猜
双指针查找
所以,我猜原始题目说的是 已排序序列{1,3,5,7,22,33} ,求 是否有两个值相加等于N,假设n=27
如果说已排序那么 如果存在解 他就会在有你画框的那个规律,毕竟已经排过序列的 1+22<27, 换3+22可以
1+33>27 换 1+22 =23 又小于27 ,移动左边变成3+22,继续移动左边5+22 =27 满足

如果左指针比右指针大,表示全部查找完毕,退出循环

当然,这个也叫状态迁移,不过我不详细写状态迁移表。你先能理解上面的。如果有兴趣自己找资料看状态迁移,动态规划这类玩意