当前位置: 首页 > news >正文

面试经典算法150题系列-数组/字符串操作之轮转数组

序言:今天是算法系列的第六题啦,无需多说,上题!

轮转数组

给定一个整数数组 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. 首先,反转整个数组。
  2. 然后,反转数组的前 k 个元素。
  3. 最后,反转数组的剩余元素。

实现过程:以nums = [1,2,3,4,5,6,7], k = 3为例

第一步反转整个数组:7 , 6 , 5 , 4 ,  3  ,  2 , 1

第二步反转数组的前k个元素:5,6,7,4,3,2,1

第三步反转数组的剩余元素:5,6,7, 1 ,  2 , 3 , 4

本题难点在于想到构造辅助函数实现反转,朋友们有想到这个思路吗?

实现代码:

public class Solution {// 这是Solution类的声明,它包含了rotate方法的定义。public void rotate(int[] nums, int k) {// rotate方法接受两个参数:一个整数数组nums和一个整数k,表示向右轮转的位数。int n = nums.length;// 获取数组的长度。k = k % n; // 如果k大于数组长度,取余数以优化// 通过取k和数组长度n的余数,可以确保即使k很大,也只会执行必要的轮转次数。if (n == 0 || k == 0) return; // 如果数组为空或k为0,无需旋转// 检查数组是否为空或者k是否为0,如果是,则直接返回,因为没有旋转的必要。// 调用reverse方法反转整个数组。reverse(nums, 0, n - 1);// 调用reverse方法反转数组的前k个元素。reverse(nums, 0, k - 1);// 再次调用reverse方法反转k个元素后的剩余部分。reverse(nums, k, n - 1);}// 这是一个辅助方法,用于反转数组中从start到end索引的元素。private void reverse(int[] nums, int start, int end) {while (start < end) {// 交换start和end索引处的元素。int temp = nums[start];nums[start] = nums[end];nums[end] = temp;// 移动start和end的索引,向中间靠拢。start++;end--;}}

http://www.lryc.cn/news/410767.html

相关文章:

  • 苹果手机怎么录屏?一键操作,轻松掌握录屏技巧
  • [Vue3] - 3 数据响应式
  • 【话题】“八股文”在实际工作中是助力、阻力还是空谈?
  • Windows 10 安装 WSL、安装 Go 以及配置环境变量的详细教程
  • 论文阅读:基于生物神经元的模拟游戏世界感知与学习
  • 理解最先进模型的起点GPT-2 源码 配置的解释
  • C++11 可变参数模板
  • 项目实战——外挂开发(30小时精通C++和外挂实战)
  • 【人工智能专栏】Constructive损失解析
  • PHP经销商订货管理系统小程序源码
  • 【网络世界】HTTPS协议
  • 根据空域图信息构造飞机航线图以及飞行轨迹模拟matlab仿真
  • llama-factory 系列教程 (五),SFT 微调后的模型,结合langchain进行推理
  • hive 中编写生成连续月sql
  • 前端开发实用的网站合集
  • 蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”
  • (七)前端javascript中的函数式编程技巧2
  • LeetCode热题 翻转二叉树、二叉树最大深度、二叉树中序遍历
  • DNS查询服务器的基本流程以及https的加密过程
  • 后台管理系统(springboot+vue3+mysql)
  • Android经典面试题之Kotlin中 if 和 let的区别
  • python inf是什么意思
  • Cursor搭配cmake实现C++程序的编译、运行和调试
  • C#-了解ORM框架SqlSugar并快速使用(附工具)
  • 巴黎奥运会 为啥这么抠?
  • Python日期和时间处理库之pendulum使用详解
  • 如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移
  • 详解Qt 之QPainterPath
  • 深入理解Apache Kylin:从概念到实践
  • vue3框架Arco Design输入邮箱选择后缀