思考的时候,简洁优美的关键字思考,可以去除冗杂的无用信息,快速理清思维脉络,写出简洁优美的代码。
维护、更新、修改、还原、保证、边界、偏移、贡献、单调、拓展
第一组:维护——更新
一个值,需要常常更新它,来保证它的正确性,这就叫维护。
如求一个数组的最大值:
思路:先把最大值的变量ma设为数组a第一个值a[0],然后遍历数组,如果a[i]比ma大,就更新ma为a[i].
int a[5]={1,5,2,3,4},ma=a[0];
for(int i=0;i<5;i++)
{
if(ma<a[i]) ma=a[i];
}
第二组:修改——还原
一个值,在不同的环境下,会需要不同的值,这就需要我们在不同环境下切换,这就是:修改,还原
举例:给定一个日期,输出这个日期是该年的第几天。考虑闰年2月=29天,非闰年28天。
思路:当闰年时,把2月修改为29天,其他月份再还原成28天
if(y%4==0&&(y%100!=0 || y%400==0))
{
mdays[2]=29;
}
else
{
mdays[2]=28;
}
第三组:保证——边界
在一组数据的处理过程中,如递归时,要始终保证数据在有效的范围或者保证数据的有限性。
如求最大公约数,保证余数会退到0。KMP字符串查找中,保证回退到0就结束。
边界同样是各种算法要考虑的问题,保证数据有效的前提,就是让数据在边界之内。