骚操作
数组
// 反转数组 void rotate(vector<int>& nums, int k) { if (nums.empty() || (k %= nums.size()) == 0) return; int n = nums.size(); reverse(nums.begin(), nums.begin() + n - k);//先反转前n-k个 reverse(nums.begin() + n - k, nums.end());//再反转后面的 reverse(nums.begin(), nums.end());//最后整体反转 }
//更快地反转数组 void rotate(vector<int>& nums, int k) { if (nums.empty() || (k %= nums.size()) == 0) return; int n = nums.size(), start = 0, i = 0, cur = nums[i], cnt = 0;//通过更多的辅助变量达到目的 逻辑较为复杂 while (cnt++ < n) { i = (i + k) % n; int t = nums[i]; nums[i] = cur; if (i == start) { ++start; ++i; cur = nums[i]; } else { cur = t; } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步