ปัญหา
สมมติว่าเรามีอาร์เรย์จำนวนเต็ม เราต้องหาสามตัวเลขที่ผลคูณของพวกมันสูงสุด แล้วคืนค่าผลคูณสูงสุดนั้น
เช่น ถ้าผนวกเข้าเป็น [1,1,2,3,3] ผลลัพธ์จะเป็น 18 เนื่องจากสามสมาชิกคือ [2,3,3]
วิธีแก้ปัญหา
- จัดเรียงอาร์เรย์ nums
- l := ขนาดของ nums
- a := nums[l - 1], b := nums[l - 2], c := nums[l - 3], d := nums[0], e := nums[1]
- คืนค่าค่าสูงสุดของ a * b * c และ d * e * a
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int maximumProduct(vector<int>& nums) {
sort(nums.begin(), nums.end());
int l = nums.size();
int a = nums[l - 1], b = nums[l - 2], c = nums[l - 3], d = nums[0], e = nums[1];
return max(a * b * c, d * e * a);
}
};
int main(){
Solution ob;
vector<int> v = {1,1,2,3,3};
cout << (ob.maximumProduct(v));
}
อินพุต
{1,1,2,3,3}
เอาต์พุต
18