您的位置:首页 > 其它

关于双指针

2016-04-10 13:37 155 查看


在百度上百度双指针,大部分都说的是二级指针,对于这个题目,所使用的双指针,并非二级指针。

而是两个指向数组首尾的指向。

如图:



首先对数组进行排序,将头指针与尾指针指向的数进行相加,如果小于目标数,头指针向后移动一次,如果大于目标数,尾指针向前移动一个位置;

直到等于目标数结束。然后将两个位置的数与原数组进行检索,找到下标。

代码如下;



双指针的运用:(回文串的判定,遇见非字母或数字就跳过)

bool isPalindrome(char* s) {//双指针做法,,,

int flag = 1;

char *p, *q;

p = s;

q = &s[strlen(s) - 1];

while(q > p){

if(*p >='a' && *p <= 'z' || *p >= 'A' && *p <= 'Z' || *p>='0' && *p <= '9'){

if(*q >='a' && *q <= 'z' || *q >= 'A' && *q <= 'Z' || *q >= '0' && *q <= '9'){

if(*p >= 'A' && *p <= 'Z'){

*p = *p - 'A' + 'a';

}

if(*q >= 'A' && *q <= 'Z'){

*q = *q - 'A' + 'a';

}

if(*p == *q){

p++;

q--;

}

else{

flag = 0;

break;

}

}

else{

q--;

}

}

else{

p++;

}

}

if(flag) return true;

else return false;

}

关于双个指针的运用,从数组两头进行遍历,使得程序的运行耗时的到减少,在顺序表的操作中经常能看到它的身影,栈的栈顶与栈底指向等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: