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

【算法】将一个数组旋转K步

拓展

unshift shift splice 时间复杂度比较高 (动了原数组了)
push pop 时间复杂度比较快 slice() 不动原数组所以也很快  时间复杂度O(1)

旋转K步

算法一


//时间复杂度O(n^2) 空间复杂度O(1)
function rotate1 (arr:number[],k:number):number[]{
  const length=arr.length
  if(!k||length===0) return arr
  const step=Math.abs(k%length)  //abs取绝对值

  // 时间 O(n^2) 空间O(1)
  for(let i=0;i<step;i++){
    const n=arr.pop()
    if(n){
      arr.unshift(n)
    }
  }
  return arr
}

算法二

//拆分数组 最后连接concat 拼接返回
//时间复杂度O(1) 没有循环所以是O(1) 空间复杂度O(n)(不重要)
function rotate2 (arr:number[],k:number):number[]{
  const length=arr.length
  if(!k||length===0) return arr
  const step=Math.abs(k%length)  //abs取绝对值
  const part1=arr.slice(-step)
  const  part2= arr.slice(0,length-step)
  const part3=part1.concat(part2)
  return part3

}
const arr=[1,2,3,4,5,6,7]
const arr1=rotate2(arr,3)
console.info(arr1)   //[5,6,7,1,2,3,4]

总结 从时间复杂度来看第二种算法更优 !!!!!

http://www.dtcms.com/a/102114.html

相关文章:

  • vue 自定义指令
  • Ollama实战指南:本地大模型一键部署与高效使用(2024最新版)
  • 【一起来学kubernetes】30、k8s的java sdk怎么用
  • VLA 论文精读(三)Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
  • sql注入学习
  • 可信数据空间:构筑安全可控数据流通
  • 强制用户裸奔,微软封锁唯一后门操作
  • 使用docker容器搭建本地yum源并及时更新
  • 循环控制的内容
  • [Vue]生命周期
  • JavaScript事件监听
  • Vue2和3的vue-router:生命周期、懒加载
  • Nmap全脚本使用指南!NSE脚本全详细教程!Kali Linux教程!(三)
  • 通过Anaconda Prompt激活某个虚拟环境并安装第三方库
  • Linux多线程编程的艺术:封装线程、锁、条件变量和信号量的工程实践
  • 今日行情明日机会——20250331
  • Ansible(2)——部署 Ansible
  • 爬虫:基本流程和robots协议
  • 从零构建大语言模型全栈开发指南:第四部分:工程实践与部署-4.1.1模型量化(INT8/FP16)与剪枝策略
  • 【软考备考】管道一过滤器(Pipe-Filter)的架构风格
  • USB有驱IC卡读卡器
  • Spring中都用到了哪些设计模式
  • 美团小程序 mtgsig1.2 拼好饭案例 分析 mtgsig
  • 六级词汇量积累day13
  • dayjs dayjs时间格式化工具(时间计算、时间格式化)
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例14,TableView16_14 拖拽自动保存示例
  • python leetcode简单练习(1)
  • 【FreeRTOS】任务(TASK)——任务的创建(源码解读)
  • Qt中绘制不规则控件
  • ​Linux 中 nmap 命令详解:从基础到实战的全面指南