当前位置: 首页> 文旅> 美景 > 力扣刷题总结 -- 数组24

力扣刷题总结 -- 数组24

时间:2025/7/11 0:10:42来源:https://blog.csdn.net/weixin_49295405/article/details/139291136 浏览次数:0次

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;
}
关键字:力扣刷题总结 -- 数组24

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: