双指针在算法题中的应用

1.从上到下按层打印二叉树

利用start和end指针记录每层元素的个数,即每层压入的元素个数,当元素一个个从list中remove时start++,直到与end相遇,成功打印了一层元素。

2.“快指针”、“慢指针”

3.和为S的连续正数序列 & 和为S的两个数字

利用low和high指针,通过双指针的线性移动来改变中间状态变量,从而达到搜索的目的

4.快速排序

5.给定一个数组,数组中元素有奇数有偶数。要求对数组进行处理,使得数组的左边为奇数,右边为偶数

void partition(int *arr,int n){
	int i = 0;
	int j = n-1;
        while(1){
            while(i<j && arr[i]%2 == 1) i++;
	        while(i<j && arr[j]%2 == 0) j--;
	        if(i<j){
	            int temp = arr[i];
	            arr[i] = arr[j];
	            arr[j] = temp;
	        }
        }
 }

未完待续。。

猜你喜欢

转载自blog.csdn.net/raylrnd/article/details/82751731