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

轮转数组(每日一题)

“路虽远,行则将至”

❤️主页:小赛毛

☕今日份刷题:轮转数组

题目链接:轮转数组

题目描述:

给定一个整数数组 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:

如:

[1,2,3,4,5,6,7]||
[7,6,5,4,3,2,1]
挪动一个数据
右旋一次
合计右旋k次
  • 时间复杂度:O(K*N)  or  O(N^2)
  • 空间复杂度:O(1) 

方法2:

(空间换时间)

如:

[1,2,3,4,5,6,7]    k = 3||    (直接把后k个copy过来)
[5,6,7]||    (再把前n-k个copy到后面)
[5,6,7,1,2,3,4]
  • 时间复杂度:O(N)
  • 空间复杂度:O(N)

方法3:

如:

[1,2,3,4,5,6,7]    k = 3||    (前n-k个逆置)
[4,3,2,1,5,6,7]||    (后k个逆置)
[4,3,2,1,7,6,5]||    (整体逆置)
[5,6,7,1,2,3,4]
  • 时间复杂度:O(N)
  • 空间复杂度:O(1)

 由于第三种方法可能没有那么容易思考到,所以我们这里只简单操作一下第二种方法:

代码:

void rotate(int* nums, int numsSize, int k){int*tmp=(int*)malloc(sizeof(int)*numsSize);int n=numsSize;k%=n;memcpy(tmp,nums+n-k,sizeof(int)*k);memcpy(tmp+k,nums,sizeof(int)*(n-k));memcpy(nums,tmp,sizeof(int)*(n));free(tmp);
}

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

相关文章:

  • jmeter使用步骤
  • Ts中泛型的理解与使用
  • uniapp使用eatchs雷达图
  • PostgreSQL jsonb
  • Spring系列四:AOP切面编程
  • VS+Qt+C++旅游景区地图导航源码实例
  • 回调函数和一般函数的区别
  • 使用vite创建Vue/React前端项目,配置@别名和Sass样式,又快又方便
  • 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
  • 【JS常见数据结构】
  • 算法基础之插入排序
  • InfoQ 分享
  • Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库
  • 人类与机器的分类不同
  • WEB安全-SQL注入,CSRF跨站伪造,OXX跨站脚本
  • 【HDFS】客户端读某个块时,如何对块的各个副本进行网络距离排序?
  • 【数字化处理】仿生假体控制中肌电信号的数字化处理研究(Matlab代码实现)
  • 谷歌推出Flax:JAX的神经网络库
  • PDF换行的难度,谁能解决?
  • 山东布谷科技直播程序源码使用Redis进行服务器横向扩展
  • symfony3.4中根据角色不同跳转不同页面
  • Dockerfile部署golang,docker-compose
  • 什么是Linux,如何在Windows操作系统下搭建Linux环境,远程连接Linux系统
  • Ubuntu下RabbitMQ安装与简单使用
  • 力扣62.不同路径(动态规划)
  • TypeScript 泛型的概念和基本使用
  • redis的事务和watch机制
  • objectMapper.getTypeFactory().constructParametricType 方法的作用和使用
  • 【websocket - Tornado】简易聊天应用
  • TCP 三次握手,四次挥手