题目
题解
第一想法
找到最大和第二大的两个数,再去做计算。有两种方法:第一种:直接使用qsort排序,最后两个数就是最大和第二大的数字。第二种:遍历比较,再用两个变量去保存。
正确题解
更简单的方法其实是直接去计算式子,用变量保存。如果下一个ij得到的式子的值比之前的更大,那就替换变量。最后return即可。
方法一:
int cmp(const void*a,const void*b){
return(*(int*)a) - (*(int*)b);
}
int maxProduct(int* nums, int numsSize){
if(numsSize==2){
return (nums[0]-1)*(nums[1]-1);
}
else{
qsort(nums,numsSize,sizeof(int),cmp);
return (nums[numsSize-1]-1)*(nums[numsSize-2]-1);
}
return 0;
}
方法二:
int maxProduct(int* nums, int numsSize){
int i;
int max = -1, nextmax = -1; // (1)
for(i = 0; i < numsSize; ++i) {
if(nums[i] > max) { // (2)
nextmax = max;
max = nums[i];
}else if(nums[i] > nextmax) { // (3)
nextmax = nums[i];
}
}
return (max-1) * (nextmax-1);
}
较快的方法三:
int maxProduct(int* nums, int numsSize){
int res=0;
for(int i=0;i<numsSize;i++){
for(int j=0;j<numsSize;j++){
if(i!=j){
int x = (nums[i]-1)*(nums[j]-1);
if(x > res){
res = x;
}
}
}
}
return res;
}