当前位置: 首页 > 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]

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

相关文章:

  • 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)的架构风格
  • 贵州网站建设seo优化/广东疫情最新情况
  • 上海外贸网站seo/重大军事新闻
  • 湖北省疫情最新情况/外贸seo优化
  • 安徽建工招采平台/英文外链seo兼职
  • 北京建设官网证书查询/搜索引擎优化是免费的吗
  • 网站外链哪里做/一般的电脑培训班要多少钱