70. 数组中两元素的最大乘积(简单)
题目要求:
给定一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请计算并返回该式的最大值。
题目分析:
找到数组中最大的两个元素即可。
题目解答:
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
class Solution
{
public:
vector<int> maxProduct(vector<int>& nums)
{
vector<int> ret;
int a = nums[0], b = nums[1]; // 获取数组前两个元素
if (a < b)
{
swap(a, b); // 将更大的元素赋给a
}
for (int i = 2; i < nums.size(); i++) // 遍历数组后面的所有元素
{
if (nums[i] > a) // 如果当前元素大于a的值,将a原来的值赋给b,将当前元素的值赋给a
{
b = a;
a = nums[i];
}
else if (nums[i] > b) // // 如果当前元素大于b但小于a的值,将当前元素的值赋给b
{
b = nums[i];
}
}
ret.push_back(a);
ret.push_back(b);
return ret; // 最终得到的a,b就是矩阵中最大的两个数
}
int NumMultiplier(int a, int b)
{
return (a - 1) * (b - 1);
}
};
int main()
{
vector<int> nums = { 3,4,5,2 };
int a = 0, b = 0;
Solution s;
cout << "原数组为:";
for (int num : nums)
{
cout << num << ", ";
}
cout << endl;
vector<int> res = s.maxProduct(nums);
cout << "数组中最大的两个元素为:";
for (int r : res)
{
cout << r << ", ";
}
cout << endl;
a = res[0];
b = res[1];
int pro = s.NumMultiplier(a, b);
cout << "乘积为:" << pro << endl;
system("pause");
return 0;
}
71. 重新排列数组(简单)
题目要求:
给定一个数组nums
,数组中有2n
个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。
请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组
题目解答:
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
class Solution
{
public:
vector<int> shuffle(vector<int>& nums, int n)
{
vector<int> ans(2 * n);
for (int i = 0; i < n; i++)
{
ans[2 * i] = nums[i]; // 将nums[i]填到ans[2 * i]
ans[2 * i + 1] = nums[i + n]; // 将nums[i + n]填到ans[2 * i + 1]
}
return ans;
}
};
int main()
{
vector<int> nums = { 2,5,1,3,4,7 };
int n = 3;
Solution s;
cout << "原数组为:" << endl;
for (auto &num : nums)
{
cout << num << ", ";
}
cout << endl;
vector<int> res = s.shuffle(nums, n);
cout << "排序后数组为:" << endl;
for (auto &r : res)
{
cout << r << ", ";
}
cout << endl;
system("pause");
return 0;
}
72. 一维数组的动态和(简单)
题目要求:
给定一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。
题目分析:
根据题意,数组中当前元素与之前所有元素的和构成了当前位置的动态和。将当前元素与之前元素循环累加即可。
题目解答:
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
class Solution
{
public:
vector<int> runningSum(vector<int>& nums)
{
int n = nums.size();
for (int i = 1; i < n; i++)
{
nums[i] += nums[i - 1];
}
return nums;
}
};
int main()
{
vector<int> nums = { 1,2,3,4 };
Solution s;
cout << "原数组为:";
for (int num : nums)
{
cout << num << ", ";
}
cout << endl;
vector<int> res = s.runningSum(nums);
cout << "动态和数组为:";
for (int r : res)
{
cout << r << ", ";
}
cout << endl;
system("pause");
return 0;
}