leetcode : 628.三个数的最大乘积(40 ms 27 MB) + sort 函数使用规则

在写此题前,先引用一个知识点:

sort()函数

头文件是“algorithm“,函数默认按升降序排列。

1.升序排列
sort(nums.begin( ),nums.end( ));
(从最小的开始)

2.降序排列
sort(nums.begin( ),nums.end( ),greater< int >());
(从最大的开始)

在使用的时候,需要用:vector< int > nums(5)

语法规范是:

#include < vector >
victor < 数据结构 > 变量名(数字长度)

代码如下:

#include<iostream>
using namespace std;
#include <algorithm>
#include <vector>
int main()
{
    
    
	vector<int> nums(5);
	for (int i = 0; i < 5; i++) {
    
    
		cin >> nums[i];
	}

	 sort(nums.begin(), nums.end());//升序排列
	 for (int i = 0; i < 5; i++) {
    
    
		 cout << nums[i];
	 }

	return 0;
}

【转载】排序的简单方法

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

思路:

  1. 先排序
  2. 再计算 , 结果有俩种情况:
  • 输出为三个最大数的乘积(nums均为正数或者负数时)
  • 输出结果为俩个最小的数与一个最大的数的乘积(有正数有负数的时候)
  1. 比较俩种大小,输出较大的

最开始想到的是用冒泡排序法 , 代码如下,但是超时了!

class Solution {
    
    
public:
    int maximumProduct(vector<int>& nums) {
    
    
        int n = nums.size();
        for(int i = 0;i < n; i++){
    
    
            for(int j = 0;j < n - 1 - i;j++){
    
    
             if(nums[j] < nums[j + 1]){
    
    
                 int temp = nums[j];
                 nums[j] = nums[j+1];
                 nums[j+1] = temp;
             }   
             }
        }
        int a = nums[0] * nums[1] * nums[2];
        int b = nums[0] * nums[n - 2] * nums[n - 1];
        return (a>b)?a:b;
    }
};

随后根据答案解析,更换了一种排序方法,使用的就是sort()函数的排序法

class Solution {
    
    
public:
    int maximumProduct(vector<int>& nums) {
    
    
        int n =nums.size();
        sort(nums.begin(),nums.end());//从小到大排序(升序)
        int a = nums[0] * nums[1] * nums[n - 1];//俩个最小的负数 与 一个最大的正数
        int b = nums[n - 3] * nums[n - 2] * nums[n - 1];//三个最大的数
        return (a>b)?a:b;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42198265/article/details/114632249