一 前言:
断更有些时间了,主要是自己的原因,要调整回来,坚持自己的选择。
二 原题如下:
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
审题:
由题意要由三个数组成最大的乘积,存在下面的情况
情况一:只有一个正数
情况二:没有正数或者不止一个正数
针对情况一取最大数和最小的两个数相乘即可;争对情况二,将最大的三个数相乘即可。
解题思路:
思路一: 线性扫描依次取出各个数据按照上述两种情况简单处理
思路二: 将数据进行排序,排序后取数据进行判断。再这里选择用插入排序中的----直接插入排序来对数据进行排序。
有关直接插入排序的知识,在往期的文章中有介绍,有兴趣的可以了解一下。
直接插入排序,看这篇就够了
四 代码实现:
线性扫描:
//C实现:
int maximumProduct(int* nums, int numsSize){
int firMax=-1000;//标记最大值
int secMax=-1000;//标记次大值
int thrMax=-1000;//标记第三大值
int firMin=1000;//标记最小值
int secMin=1000;//标记次小值
for(int i=0;ifirMax)
{
thrMax=secMax;//将数据进行更新
secMax=firMax;
firMax=nums[i];
}
else if(nums[i]>secMax)
{
thrMax=secMax;
secMax=nums[i];
}
else if(nums[i]>thrMax)
{
thrMax=nums[i];
}
if(nums[i]
直接插入排序:
//C实现
void InsertSort(int array[],int size)//对数据进行降序排序
{
int i;//标记无序组的数组下标位置
int j;//标记有序组的数组下标位置
int temp;//临时变量,用于临时拷贝数据
for(i=1;i=0&&array[j]
C++调用库实现:
//C++
class Solution {
public:
int maximumProduct(vector& nums) {
int size=nums.size();
sort(nums.begin(),nums.end());
return max(nums[size-1]*nums[size-2]*nums[size-3],nums[size-1]*nums[0]*nums[1]);
}
};
序:
还是一如既往的推荐大家自行设计排序算法来对数据进行排序,对巩固知识很有帮助。本次的分享就到这里
我是老胡,感谢阅读! ❤️ ❤️



