栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++解OJ题--三个数的最大乘积(线性扫描+直接插入排序)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++解OJ题--三个数的最大乘积(线性扫描+直接插入排序)


一 前言:
  断更有些时间了,主要是自己的原因,要调整回来,坚持自己的选择。


二 原题如下:

  给你一个整型数组 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]);
    }
};

序:
  还是一如既往的推荐大家自行设计排序算法来对数据进行排序,对巩固知识很有帮助。本次的分享就到这里


  我是老胡,感谢阅读! ❤️ ❤️

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号