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

网站设计主题有哪些开发公司电梯前室只给一楼吊顶

网站设计主题有哪些,开发公司电梯前室只给一楼吊顶,wordpress手机端主题插件下载失败,太月星网站建设程序开发题目 输入一个数组如 [1,2,3,4,5,6,7],输出旋转 k 步后的数组。 旋转 1 步:就是把尾部的 7 放在数组头部前面,也就是 [7,1,2,3,4,5,6]旋转 2 步:就是把尾部的 6 放在数组头部前面,也就是 [6,7,1,2,3,4,5]… 思路 思…

题目

输入一个数组如 [1,2,3,4,5,6,7],输出旋转 k 步后的数组。

  • 旋转 1 步:就是把尾部的 7 放在数组头部前面,也就是 [7,1,2,3,4,5,6]
  • 旋转 2 步:就是把尾部的 6 放在数组头部前面,也就是 [6,7,1,2,3,4,5]

思路

思路1:将数组尾部的元素 pop,然后 unshift 到头部
思路2:将数组拆分成两段,然后通过 concat 拼接在一起

那么哪个是最优解呢?
遵循的原则:复杂度,在前端开发中重时间,轻空间。因为相应速度更重要,占内存的情况不那么重要。

代码

思路1

/*** 旋转数组 k 步 - 使用 pop 和 unshift* @param arr arr* @param k k* @returns arr*/
export function rotate1(arr: number[], k: number): number[] {const length = arr.lengthif (!k || length === 0) return arrconst step = Math.abs(k % length) // abs 取绝对值// O(n^2)for (let i = 0; i < step; i++) {const n = arr.pop()if (n != null) {arr.unshift(n) // 数组是一个有序结构,unshift 操作非常慢!!! O(n)}}return arr
}

思路2

/*** 旋转数组 k 步 - 使用 concat* @param arr arr* @param k k*/export function rotate2(arr: number[], k: number): number[] {const length = arr.lengthif (!k || length === 0) return arrconst step = Math.abs(k % length) // abs 取绝对值// O(1)const part1 = arr.slice(-step) // O(1)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)// 性能测试
const arr1 = []
for (let i = 0; i < 10 * 10000; i++) {arr1.push(i)
}
console.time('rotate1')
rotate1(arr1, 9 * 10000)
console.timeEnd('rotate1') // 885ms O(n^2)const arr2 = []
for (let i = 0; i < 10 * 10000; i++) {arr2.push(i)
}
console.time('rotate2')
rotate2(arr2, 9 * 10000)
console.timeEnd('rotate2') // 1ms O(1)

在这里插入图片描述
可以看到两种方式速度相差了百倍

测试用例

import { rotate1, rotate2 } from './array-rotate'describe('数组旋转', () => {it('正常情况', () => {const arr = [1, 2, 3, 4, 5, 6, 7]const k = 3const res = rotate2(arr, k)expect(res).toEqual([5, 6, 7, 1, 2, 3, 4]) // 断言})it('数组为空', () => {const res = rotate2([], 3)expect(res).toEqual([]) // 断言})it('k 是负值', () => {const arr = [1, 2, 3, 4, 5, 6, 7]const k = -3const res = rotate2(arr, k)expect(res).toEqual([5, 6, 7, 1, 2, 3, 4]) // 断言})it('k 是 0',  () => {const arr = [1, 2, 3, 4, 5, 6, 7]const k = 0const res = rotate2(arr, k)expect(res).toEqual(arr) // 断言})it('k 不是数字', () => {const arr = [1, 2, 3, 4, 5, 6, 7]const k = 'abc'// @ts-ignoreconst res = rotate2(arr, k)expect(res).toEqual(arr) // 断言})
})

执行 npx jest xxx.test.ts 即可
在这里插入图片描述

复杂度

思路1,时间复杂度为 O(n^2),空间复杂度O(1)
思路2,时间复杂度为 O(1),空间复杂度O(n)

思路1这里为什么是 O(n^2),我们明明只有一次遍历?
答:数组是一个有序结构,unshift 操作非常慢
在这里插入图片描述
数组是连续的内存空间,就像这个教室的图,如果要把 F 同学放在前面(unshift操作),那么就得把 ABCDE挨个往后移动一位,所以这个操作是很慢的。但是 push、pop 操作不会,直接给后面添加/删除,前面同学不用动。

http://www.yayakq.cn/news/665773/

相关文章:

  • 辽宁建设厅官方网站海口网络推广
  • 哪个网站可以做销售记录仪网站栏目和版块的设计心得
  • 肥西县建设局资询网站网站流量ip造假图片
  • 网站地图添加百度推广网站怎么做
  • 实用网站的设计与实现建网站麻烦吗
  • 湖滨网站建设东莞网站设计开发技能大赛
  • 如何用dw做网站广州番禺专业做网站
  • 乐山智顶网站建设外贸自建零售网站做仿牌
  • 装修公司网站asp源码怎么用ngrok做网站
  • 2017最佳网站设计杭州俄语网站建设
  • 广州网站建设公司怎么挑选系统优化软件
  • 视频网站如何做营销策划公司邮箱从哪里登录
  • 网站推广策划方案毕业设计免费网页空间
  • 网站后台生成文章很慢广州安全教育平台注册
  • 去什么网站发贴做推广wordpress设置多域名多站点
  • 廊坊开发网站公司wordpress博客用什么服务器
  • 建设网站需要的资质证书深圳的网站建设的公司
  • 专业网站制作公司名称网页设计师的认识
  • 文山州住房和城乡建设网站宿州网站建设公司哪家好
  • 网站配色原则网站建设seo网络推广
  • 大学生水果预定配送网站建设的项目规划书上位机软件开发工具
  • 浏览国外网站 dns大安市网站
  • 做算法题的网站自己做的网站安全吗
  • 苏州移动网站建设红色主题展馆设计
  • 甘肃省建设工程安全质量监督管理局网站网站数据库设计模板
  • 南平网站开发帮别人做网站必须要开公司
  • 谷歌云可以做网站吗微信软件定制开发
  • 在郑州建设网站这么做东莞网络推广代运营
  • 网站建设视频教程。亚马逊网站建设的意义
  • 那些影视解析网站怎么做的建设旅游网站的工作方案