如果读者们最下面的题目有更好的想法请联系我交流一下,QQ 1192625541
1.已知A、B、M都在集合S中,且满足A+B=M,求M得最大值,并分析算法的复杂度
这道题的思路是这样的,先对S进行排序,从小到大,然后从最大的元素M开始,设置两个指针分别指向第一个元素A和最大的元素减一的B,如果A+B=M,OK,最大的M找到了,如果A+B<M,指向A的指针右移,如果A+B>M,指向B的指针左移,如此循环,一直找不到的话,M就设为第二大的元素,继续重复之前的步骤,直到找到最大的M,全部扫完找不到就返回-1,代码如下:
int maxM(int a[]){
quiksort(a[]);
int right,left,sum;
for(int i=a.length;i>=2;i--){
left=0;
right=i-1;
while(left<right){
sum=a[left]+a[right];
if (sum==a[i]){
return a[i];
}
else if(sum>a[i]){
right--;
}
else{
left++;
}
}
}
return -1;
}
</pre><pre>
2.求子数组和最大的问题
这道题目是编程之美上的经典题目