赞
踩
使用双指针思路可以大大降低算法时间复杂度。
求一个有序数组中和=8的下标。
设置两个不同的指针 ,或者头,或者尾。在一个递增的序列中,根据结果分类,判断指针的下一步应该怎么移动。
结果分类:
a[i]+b[j]==8则i++,j- -都相互靠近;
a[i]+b[j] < 8 ,需要移动指针i ,i++(i与a[i]成正比,增加i即可使结果靠近8);
a[i]+b[j] > 8 ,需要移动指针j ,j- -(减少j使结果靠近8)。
//在有序数组中求出两个数和为8的数 void TwoPointerEg1(){ int num[8] = { 1, 2, 3, 4, 5, 6 ,7,8}; int i = 0, j = 7; while (i<j){ // 保证i、j的索引不会重叠 if (num[i] + num[j] == 8) { cout << i << " " << j << endl; i++; j++; } else if (num[i] + num[j] > 8) { j--;//如果两个数相加大于10,所以需要缩小一个数,j--实现递增数组缩小 } else{ i++; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。