leetcode 628. Maximum Product of Three Numbers(C语言,堆排序,计算最大乘积)33
来源:互联网 发布:苏联的秘密武器知乎 编辑:程序博客网 时间:2024/05/22 03:15
贴原题:
解析:
本题是给出一个数组,让从中选择3个数,使得这三个数的乘积最大,并返回这个成绩结果。
我的思路依旧是先排序,毕竟乱序很难从中得到实际想要的数,排序算法我采用了堆排序。排好序之后由于可能出现最小的几个数是负数的情况,所以优先考虑最小的两个数和最大数的乘积是否大于三个最大数的乘积,若成立则返回该数。否则,返回三个最大数的乘积。
exp1:-10,-9,-1,0,1,2,3
最大值应该是-10*-9*3
exp2:-3,-2,-1,0,1,2,3
最大值应该是-3*-2*3
exp3:-3,-2,-1,0,1,5,6,9
最大值应该是9*6*5
堆排序带注释版题目链接:http://blog.csdn.net/m0_37454852/article/details/78156566
贴代码:
void heapAdjust(int* nums, int numsSize, int root){ int left=2*root; int right=left++; int largest=root; if(left<numsSize && *(nums+left)>*(nums+largest)) { largest=left; } if(right<numsSize && *(nums+right)>*(nums+largest)) { largest=right; } if(largest!=root) { *(nums+largest)=*(nums+largest)^*(nums+root); *(nums+root)=*(nums+largest)^*(nums+root); *(nums+largest)=*(nums+largest)^*(nums+root); heapAdjust(nums, numsSize, largest); }}void heapSort(int* nums, int numsSize){ for(int i=numsSize/2; i>=0; i--) { heapAdjust(nums, numsSize, i); } for(int i=numsSize-1; i>0; i--) { *nums=*nums^*(nums+i); *(nums+i)=*nums^*(nums+i); *nums=*nums^*(nums+i); heapAdjust(nums, i, 0); }}#define myabs(x) (x>0?x:(-x))#define max(a, b) (a>b?a:b)int maximumProduct(int* nums, int numsSize) { heapSort(nums, numsSize);//堆排序,升序 if(nums[0]*nums[1]*nums[numsSize-1]>nums[numsSize-3]*nums[numsSize-1]*nums[numsSize-2]) {//考虑最小的两个数为负数的情况 return nums[0]*nums[1]*nums[numsSize-1]; } return nums[numsSize-3]*nums[numsSize-1]*nums[numsSize-2];}
阅读全文
0 0
- leetcode 628. Maximum Product of Three Numbers(C语言,堆排序,计算最大乘积)33
- 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 -- 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
- 记录下一年多搞ACM的时光
- HDOJ5584 Lcm Walk 2015ICPC上海-L
- HDU 5185 Equation 完全背包变形.
- Faster RCNN详解
- 【宏观】两期动态模型
- leetcode 628. Maximum Product of Three Numbers(C语言,堆排序,计算最大乘积)33
- Hibernate对象关联映射
- Leetcode代码学习周记——Container With Most Water
- php封装单文件上传到数据库(路径)
- <学习笔记?>考试与做题的注意事项总结。
- zookeeper 安装
- Linux的find、grep命令
- android的IPC机制
- 最小生成树 Prim、Kruscal算法 (以HDU 1863为例)