原题链接
思路一:暴力
- 直接枚举所有的四个不同下标的数的组合!
- 四层 f o r for for 循环,选定四个不同的数,从而达到枚举所有合法的组合!
代码:
class Solution {
public:
int maxProductDifference(vector<int>& nums) {
int n = nums.size();
int mx = 0;
for (int i=0; i < n; i ++) {
for (int j=0; j < n; j ++) {
if (j != i) {
for (int k=0; k < n; k ++) {
if (k != i && k != j) {
for (int l=0; l < n; l ++) {
if (l != i && l != k && l != j) {
mx = max(mx, nums[i]*nums[j] - nums[k]*nums[l]);
}
}
}
}
}
}
}
return mx;
}
};
思路二:排序!
- 可以选择采用升序排序的方式!
- 然后取出末尾的两个数,再取出首部的两个数,最后作差即可!
- C++的sort函数使用了一种叫做快速排序(quicksort)的算法,它是一种基于比较的、交换式的排序算法。快速排序有以下几个步骤:
(1)选择一个基准元素。
(2)将所有小于基准的元素移到基准左边,将所有大于基准的元素移到基准右边。
(3)对基准左边的元素和右边的元素分别递归进行步骤1和步骤2,直到待排序部分中只剩下一个元素或者没有元素。
快速排序的时间复杂度为O(n logn),具体时间复杂度取决于基准元素的选择以及待排序序列的划分情况。
代码二:
class Solution {
public:
int maxProductDifference(vector<int>& nums) {
int n = nums.size();
sort (nums.begin(), nums.end());
return (nums[n-1]*nums[n-2] - nums[0]*nums[1]);
}
};