首先如果写了while循环,在while语句结束时一定有括号里的东西不满足了
例如,要找一端序列中第一个比它大的数字,那么while循环条件括号里要加一个<=,意为跳出时不满足条件
另外while循环遍历某些东西时,还可能会出现遍历完的情况,这时要加一个n&&…或者n>=某某
所以如果是正常遍历某个序列,while里的东西为不满足条件&&有东西
再拿单调栈为例,有一句话为while (tt && stk[tt] >= x) tt -- ;
因为栈是单调递增的,所以条件为栈不为空(即tt,有东西)和stk[tt]>=x(不满足条件)把栈中的元素弹出,这样循环结束后得到的tt就是不满足条件的东西(要么tt为0,栈空了,输出-1,要么tt指向的就是第一个比它小的数字,要输出,且tt是栈顶了)最后压栈上移stk[ ++ tt] = x;
总结就是,正确写对while循环里的东西,不满足条件+有东西,最后得到的数字为不满足条件的部门,如果是i,n,那就是第一个满足条件的编号,如果是a[i],a[n],那就是第一个满足条件的值