ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

15 轮转数组

2026/8/9 14:15:23 拓冰建站 浏览量
15 轮转数组 给定一个整数数组nums将数组中的元素向右轮转k个位置其中k是非负数。示例 1:输入:nums [1,2,3,4,5,6,7], k 3输出:[5,6,7,1,2,3,4]解释:向右轮转 1 步:[7,1,2,3,4,5,6]向右轮转 2 步:[6,7,1,2,3,4,5]向右轮转 3 步:[5,6,7,1,2,3,4]示例 2:输入nums [-1,-100,3,99], k 2输出[3,99,-1,-100]解释:向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100]提示1 nums.length 105-231 nums[i] 231 - 10 k 105进阶尽可能想出更多的解决方案至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为O(1)的原地算法解决这个问题吗思路环形链表1、检查参数的合法性2、计算数组的长度n轮转大小为kk有可能大于n,真实的kk%n3、创建一个新的vector ,创建一个指针point指向数组的k位置pointk4、从point指针开始循环一圈数组放入新的vercor中5、返回新的vectorclass Solution { public: void rotate(vectorint nums, int k) { int nnums.size(); if(n2||k0) return; vectorint _temp(n,0); int ik%n; int begin0; do{ _temp[i%n]nums[begin]; }while(begin!n); nums.swap(_temp); } };数组翻转思路1、创建一个翻转vector的函数2、翻转整个数组3、翻转0到k-1的位置4、翻转k到size-1的位置class Solution { public: void rotate(vectorint nums, int k) { int nnums.size(); if(n2||k0) return; kk%n; reverse(nums.begin(),nums.end()); reverse(nums.begin(),nums.begin()k); reverse(nums.begin()k,nums.end()); } };reverse翻转元素顺序作用将vector中元素的顺序完全颠倒。#include vector #include algorithm // reverse 在这里 std::vectorint v {1, 2, 3, 4, 5}; std::reverse(v.begin(), v.end()); // v 变为 {5, 4, 3, 2, 1}推荐一个零声教育学习教程个人觉得老师讲得不错分享给大家[LinuxNginxZeroMQMySQLRedisfastdfsMongoDBZK流媒体CDNP2PK8SDockerTCP/IP协程DPDK等技术内容点击立即学习:链接