网站设计制作推荐,建筑网站知乎,网络营销策略优化,wordpress简单个人主题189. 轮转数组 - 力扣#xff08;LeetCode#xff09;
向右轮转将使尾部k个元素顶到头部 将整个数组反转#xff0c;再分别反转前k个元素和剩下的元素即可
class Solution {
public:void rotate(vectorint nums, int k) {k % nums.size();reverse(nums.begi…189. 轮转数组 - 力扣LeetCode
向右轮转将使尾部k个元素顶到头部 将整个数组反转再分别反转前k个元素和剩下的元素即可
class Solution {
public:void rotate(vectorint nums, int k) {k % nums.size();reverse(nums.begin(), nums.end());reverse(nums.begin(), nums.begin() k);reverse(nums.begin() k, nums.end());}
};考虑直接将元素向后移动k位因为移动覆盖将导致数据丢失所以我们需要将“即将被覆盖的数据”保存起来 需要移动的次数k % 数组长度数组长度 / k 1就是需要移动的次数 对前k - 1个数进行移动即可 560. 和为 K 的子数组 - 力扣LeetCode
前缀和查找用mp记录每个位置上的前缀和出现了几次 若当前的前缀和为pre则ans mp[pre - k] 需要注意的是0个元素的前缀和为0
class Solution {
public:int subarraySum(vectorint nums, int k) {int pre 0, ans 0;unordered_mapint, int mp;mp[0] ;for (int i 0; i nums.size(); i){pre nums[i];ans mp[pre - k];mp[pre] ;}return ans;}
};