在写此题前,先引用一个知识点:
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
思路:
- 先排序
- 再计算 , 结果有俩种情况:
- 输出为三个最大数的乘积(nums均为正数或者负数时)
- 输出结果为俩个最小的数与一个最大的数的乘积(有正数有负数的时候)
- 比较俩种大小,输出较大的
最开始想到的是用冒泡排序法 , 代码如下,但是超时了!
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;
}
};