面试经典 150 题

文章目录

6、轮转数组

1、描述

给定一个整数数组 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、关键字

数组向后轮转变换
3、思路

先用k对n取模

思路一:使用辅助数组,时间复杂度O(N),空间复杂度O(N)

思路二:发现规律:先把整个数组逆置,之后把前k个元素逆置,之后把后边n- k个元素逆置
4、notes

多练
6、code

cpp 复制代码
class Solution {
public:
   void reverse(vector<int>& nums, int i, int j) {
        while(i < j) {
            int tem = nums[i];
            nums[i] = nums[j];
            nums[j] = tem;     
            i++;
            j--;
        }
   }
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        k %= n ;
        reverse(nums, 0, n - 1); // 整个数组逆置
        reverse(nums, 0,  k - 1); // 逆置前边的k个,
        reverse(nums, k, n - 1); // 逆置后边的n - k个
    }
};
相关推荐
神里流~霜灭12 分钟前
(C++)数据结构初阶(顺序表的实现)
linux·c语言·数据结构·c++·算法·顺序表·单链表
一只乔哇噻33 分钟前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
在未来等你34 分钟前
Elasticsearch面试精讲 Day 11:索引模板与动态映射
大数据·分布式·elasticsearch·搜索引擎·面试
愚润求学35 分钟前
【贪心算法】day7
c++·算法·leetcode·贪心算法
在未来等你1 小时前
Kafka面试精讲 Day 14:集群扩容与数据迁移
大数据·分布式·面试·kafka·消息队列
要开心吖ZSH1 小时前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
程序员清风1 小时前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试
带娃的IT创业者1 小时前
如何开发一个教育性质的多线程密码猜测演示器
网络·python·算法
绝无仅有1 小时前
HTTP面试之实战经验与总结
后端·面试·github
绝无仅有1 小时前
职场面试redis经历之与一位资深技术面试官的技术问答与总结
后端·面试·github