LEETCODE刷题日记628

写在前边

期末考试终于结束了!放假了放假了!成绩虽然不知道怎么样,但是至少对得起良心了,考试结束意味着要重新开始刷题了,在家里也不能够懈怠!

这次刷的题目是昨天的一道简单题,然而简单题也卡到我了。。。太长时间不做题,确实会手生。

先看题目:
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入:nums = [1,2,3]
输出:6
示例 2:

输入:nums = [1,2,3,4]
输出:24
示例 3:

输入:nums = [-1,-2,-3]
输出:-6

提示:

3 <= nums.length <= 104
-1000 <= nums[i] <= 1000

很简单的一道题目,找出一个数组中三个数相乘最大的值,刚开始看我还以为是动态规划,但是后来发现不是。。。我想直接排序取前三个,又发现如果有负数参与进来会很麻烦,就这样我突然不知道怎么做了。看了题解才知道,原来我想到的两种情况,就是所有的情况。。。但是我没敢写,这得怪自己脑子没转过来,如果直接推理出来只有这两种情况就好了。

所以这道题,如果数组中全是非负数或者是非正数,直接去前三个最大的数相乘就好,但是如果有正有负,最大值可能在最大的三个值的乘积和最小的两个数(全是负数)与最大值的乘积,比如:-100,-99,1,2,3,这个数组中三个数乘积最大值就是-100*-993而不是12*3.
想到这里,其实我当时还是不知道怎么写出来代码,因为情况太多了,我把自己绕在死胡同里了,老想着直接把最大值选出来并输出,其实可以把这么多个值放在一起,用一个max函数直接选取最大值就好了。。。实在是脑子抽了。

像这道题,我认为让我学到的东西很多,一是要分析好题目,不要被暂时的复杂迷惑,其次是不能一根筋,得活学活用,多用标准库的的东西。
代码如下:

#include"iostream"
#include"vector"
#include"algorithm"
using namespace std;
class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        for(int i=0;i<nums.size();i++)
        {
            cout<<nums[i]<<endl;
        }
        return max(nums[0]*nums[1]*nums[nums.size()-1],nums[nums.size()-1]*nums[nums.size()-2]*nums[nums.size()-3]);
    }
};
int main()
{
    vector<int> nums={-100,-99,1,2,3};
    Solution s;
    int result=s.maximumProduct(nums);
    cout<<result<<endl;
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值