数据算法学习篇

110 阅读1分钟

前言

没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。

这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

数组旋转K步

//函数逻辑实现
  function rotate(arr,k){
    const length=arr.length
    if(!k||length==0) return arr;
    const step =Math.abs(k%length)//abs 取绝对值
    for(let i=0;i<step;i++){
    //pop() 方法是删除最后一个元素并返回删除的元素
    //unshift 向前添加一个元素
    const n=arr.pop()
    if(n !=null){
    arr.unshift(n)
    }
    }
   return arr
  }
  
  //功能测试
  const arr=[9,8,7,6,5,4,3]
  const arr1=rotate(arr,3)
  console.log(arr1)// 5 4 3 9 8 7

实现方法二

 function ratate1(arr,k){
   const length=arr.length
   if(!k ||length===0)return arr
   const step=Math.abs(k%length)
   const part1=arr.silce(-step)//截取后面多少位
   const part2=arr.silce(0,length-step)//截取前面几位
   const parts=part1.concat(part2)//把1和2拼接在一起
    return part3
 
 }
 
 //功能测试
  const arr=[9,8,7,6,5,4,3]
  const arr1=rotate1(arr,3)
  console.log(arr1)//5 4 3 9 8 7

单元测试

 import {rotate,rotate1}from '文件'
 describe('数组旋转',()=>{
   it('正常情况',()=>{
    const arr=[1,2,3,4,5,6]
     const k=3
     cosnt res=ratate(arr,k)
     expect(res).toEqual([4,5,6,1,2,3])//断言 这两个数组是否相等
   })
  it('数组为空',()=>{
     const res=rotate([],3)
     expect(res).toEqual([])
  })
   it('k为负值',()=>{
    const arr=[1,2,3,4,5,6]
     const k=3
     cosnt res=ratate(arr,k)
     expect(res).toEqual([4,5,6,1,2,3])//断言 这两个数组是否相等
  })
     it('k不是数字',()=>{
    const arr=[1,2,3,4,5,6]
     const k=‘ABC’
     cosnt res=ratate(arr,k)
     expect(res).toEqual(arr)//断言  arr
  })
   it('k是0',()=>{
    const arr=[1,2,3,4,5,6]
     const k=0
     cosnt res=ratate(arr,k)
     expect(res).toEqual(arr)//断言  arr
  })
 })
 
 

总结

 初学单元测试。