189. 轮转数组 - 力扣(LeetCode)
 
向右轮转将使尾部k个元素顶到头部
 将整个数组反转,再分别反转前k个元素和剩下的元素即可
class Solution {
public:
    void rotate(vector<int>& 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(vector<int>& nums, int k) {
        int pre = 0, ans = 0;
        unordered_map<int, int> mp;
        mp[0] ++ ;
        for (int i = 0; i < nums.size(); ++ i)
        {
            pre += nums[i];
            ans += mp[pre - k];
            mp[pre] ++ ;
        }
        return ans;
    }
};



















