leetcode 628 Maximum Product of Three Numbers c语言 (找到第k大的数)
来源:互联网 发布:java防止sql注入转义 编辑:程序博客网 时间:2024/05/22 00:25
看到这个题,只需要考虑三个数的乘积为最大的即可,就是要首先为正数,其次值最大。首先的想法就是排序,先排序一下,会发现什么呢? 就能感觉出要么答案是最大的三个数的乘积,要么是两个最小的数的乘积再乘上最大的那个数,所以答案就呼之欲出了。
试了一下冒泡排序发现超时,这里用到c语言自带的快速排序的函数,在stdlib.h中,函数为qsort,网上搜了一下,qsort(首地址,元素个数,sizeof(每个元素的大小),cmp),
函数的四个参数是这个,cmp为一个 int 型 int cmp(const void* a,const void* b) { return *(int*)a -*(int*)b //从小到大排序} //反之从大到小 这样即可
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b; //由小到大排序
}
int maximumProduct(int* nums, int numsSize) {
qsort(nums,numsSize,sizeof(0),cmp);
int k1,k2;
k1=nums[0]*nums[1]*nums[numsSize-1];
k2=nums[numsSize-1]*nums[numsSize-2]*nums[numsSize-3];
return k1>k2? k1:k2;
}
这个有39ms
然后再搜了一下,发现可疑通过o(n)解决,其实原理也是一样的,就是找到最大的三个数或者最小的两个数和最大的那个数 比较这两个的乘积谁最大,这样就可以了。
#include<stdio.h>
#include<stdlib.h>
#define max(a,b) (a>b? a:b)
#define min(a,b) (a>b? b:a)
int min3(int a,int b,int c)
{
return min(a,b)<c? min(a,b):c;
}
int max3(int a,int b,int c)
{
return max(a,b)>c? max(a,b):c;
}
int mid(int a,int b,int c)
{
if(a>=min(b,c)&&a<=max(b,c))
{printf("%d %d %d\n",a,min(b,c),max(b,c));return a;}
if(b>=min(a,c)&&b<=max(a,c))
return b;
return c;
}
int maximumProduct(int* nums, int numsSize) {
int max1=max3(nums[0],nums[1],nums[2]),max3=min3(nums[0],nums[1],nums[2]);
int max2=mid(nums[0],nums[1],nums[2]);
int min1=min(nums[0],nums[1]),min2=max(nums[0],nums[1]);
for(int i=0;i<numsSize;i++)
{
if(i>=3){
if(nums[i]>max1)
{
max3=max2;
max2=max1;
max1=nums[i];
}
else if(nums[i]>max2)
{
max3=max2;
max2=nums[i];
}
else if(nums[i]>max3)
max3=nums[i];
}
if(i>=2){
if(nums[i]<min1)
{
min2=min1;
min1=nums[i];
}
else if(nums[i]<min2)
min2=nums[i];
}
}
int k1=max1*max2*max3;
int k2=min1*min2*max1;
return k1>k2? k1:k2;
}
19MS
- leetcode 628 Maximum Product of Three Numbers c语言 (找到第k大的数)
- leetcode 628:Maximum Product of Three Numbers
- Leetcode 628 Maximum Product of Three Numbers
- leetcode(628) Maximum Product of Three Numbers
- LeetCode 628 Maximum Product of Three Numbers
- leetcode 628 Maximum Product of Three Numbers
- leetcode-628-Maximum Product of Three Numbers]
- leetcode 628. Maximum Product of Three Numbers(C语言,堆排序,计算最大乘积)33
- [leetcode]628. Maximum Product of Three Numbers
- leetcode#628. Maximum Product of Three Numbers
- leetcode: 628. Maximum Product of Three Numbers
- leetcode 628. Maximum Product of Three Numbers
- [LeetCode] 628. Maximum Product of Three Numbers
- [leetcode]628. Maximum Product of Three Numbers
- LeetCode 628. Maximum Product of Three Numbers
- leetcode -- 628. Maximum Product of Three Numbers
- [LeetCode]628. Maximum Product of Three Numbers
- leetcode No628. Maximum Product of Three Numbers
- iOS转前端之仿写登录页面
- 关于浏览器隐私/无痕模式下localStorage的判断
- 视觉设计师提升自己能力的17条经验(上)
- CLR Via C# Note--The CLR's execution mode
- 四、Enable and Configure Cross-Database Access
- leetcode 628 Maximum Product of Three Numbers c语言 (找到第k大的数)
- web开发—前言
- 在线教育+直播,千亿市场的新入口
- 解决如何点击返回上层
- mysql--新建表的默认值小结
- 页面文本复制
- Node.js 运行.js文件出现错误找不到文件的解决办法
- android Utils大集合
- Android各控件绚丽Dome下载