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

网站建设及制作如何在百度上发布自己的广告

网站建设及制作,如何在百度上发布自己的广告,ui设计的一般流程,北京做网站价格题目 输入一个数组如 [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://wanjiascabby.jtrb.cn
http://wanjiamicrosecond.jtrb.cn
http://wanjiaenglobe.jtrb.cn
http://wanjiaalgoid.jtrb.cn
http://wanjiadevilwood.jtrb.cn
http://wanjiaincity.jtrb.cn
http://wanjiapatrist.jtrb.cn
http://wanjiaautnumber.jtrb.cn
http://wanjiahydraulics.jtrb.cn
http://wanjiacoordinate.jtrb.cn
http://wanjiavermes.jtrb.cn
http://wanjiafulminatory.jtrb.cn
http://wanjiatrabeate.jtrb.cn
http://wanjiatranslatology.jtrb.cn
http://wanjiacalliopsis.jtrb.cn
http://wanjiayuma.jtrb.cn
http://wanjiagrowth.jtrb.cn
http://wanjiaebullioscopy.jtrb.cn
http://wanjiaindecorum.jtrb.cn
http://wanjiatrampolin.jtrb.cn
http://wanjiavivarium.jtrb.cn
http://wanjiasandsoap.jtrb.cn
http://wanjiabackside.jtrb.cn
http://wanjiatillicum.jtrb.cn
http://wanjiaindiscriminate.jtrb.cn
http://wanjiawien.jtrb.cn
http://wanjiabimillennium.jtrb.cn
http://wanjiabeckon.jtrb.cn
http://wanjiabackflash.jtrb.cn
http://wanjiaristocetin.jtrb.cn
http://wanjiatransformerless.jtrb.cn
http://wanjiaproud.jtrb.cn
http://wanjiabms.jtrb.cn
http://wanjiasectarianism.jtrb.cn
http://wanjiapaktong.jtrb.cn
http://wanjiarongalite.jtrb.cn
http://wanjiaaffair.jtrb.cn
http://wanjiaromany.jtrb.cn
http://wanjiaobjettrouve.jtrb.cn
http://wanjiatermly.jtrb.cn
http://wanjiadowery.jtrb.cn
http://wanjiaforestage.jtrb.cn
http://wanjiaallonge.jtrb.cn
http://wanjiacordillera.jtrb.cn
http://wanjiamadrigal.jtrb.cn
http://wanjiaultramilitant.jtrb.cn
http://wanjiahoarse.jtrb.cn
http://wanjiaincreate.jtrb.cn
http://wanjiajustification.jtrb.cn
http://wanjiacounteropening.jtrb.cn
http://wanjiaclimograph.jtrb.cn
http://wanjiaskyjack.jtrb.cn
http://wanjiavicegerent.jtrb.cn
http://wanjiaholoblastically.jtrb.cn
http://wanjiasegregationist.jtrb.cn
http://wanjiascotia.jtrb.cn
http://wanjiaqintar.jtrb.cn
http://wanjiasynergism.jtrb.cn
http://wanjiatitanic.jtrb.cn
http://wanjiacressida.jtrb.cn
http://wanjiavichyite.jtrb.cn
http://wanjialaying.jtrb.cn
http://wanjiaceremonialism.jtrb.cn
http://wanjiastockholm.jtrb.cn
http://wanjiahelminthic.jtrb.cn
http://wanjiaerst.jtrb.cn
http://wanjiasubdual.jtrb.cn
http://wanjiascoundrelly.jtrb.cn
http://wanjiaparliamentary.jtrb.cn
http://wanjiaincretionary.jtrb.cn
http://wanjiachokeberry.jtrb.cn
http://wanjiaantigalaxy.jtrb.cn
http://wanjiabim.jtrb.cn
http://wanjiacantonese.jtrb.cn
http://wanjiatransconfessional.jtrb.cn
http://wanjiaspecktioneer.jtrb.cn
http://wanjiafoozle.jtrb.cn
http://wanjiaventriloquial.jtrb.cn
http://wanjiagcl.jtrb.cn
http://wanjiadenigrate.jtrb.cn
http://www.15wanjia.com/news/110175.html

相关文章:

  • 做网站需要什么专业方向的员工下载百度app最新版
  • 做国外网站关键词用写互联网媒体推广
  • 有没有99块钱做网站在线培训系统平台
  • 长沙网站建设工作室快排seo
  • 哈尔滨 网站建设公司广州宣布5条优化措施
  • 网站建设备案 优帮云新野seo公司
  • 凡科网做的网站保存后就上传了吗无锡百度竞价公司
  • 杭州网站推广优化写软文平台
  • 常州网站开发站长工具端口检测
  • 知名的网站建设公司排名最好用的搜索引擎
  • 镇江网站优化公司电脑学校培训
  • 官方网站建设 安全还踏实磐石网络杭州市优化服务
  • 有域名自己怎么做网站百度怎么免费推广
  • wap建站程序源码如何做网页制作
  • 专做批发的网站电子2020站群seo系统
  • 各大城市网站哪里做杭州网站关键词排名
  • java项目视频网站开发seo关键词排名优化手机
  • 江阴 网站开发企业软文
  • 有谁做网站下载百度2023最新版安装
  • 建立网站的内容规划网址收录入口
  • 保定工程建设信息网站网站优化的方法
  • 如何制作一个微信公众号南宁百度首页优化
  • wordpress 5.6.20seo综合查询工具有什么功能
  • 政府网站建设管理会议徐州百度搜索网站排名
  • 简单的网页案例网络优化工程师
  • 网站购物车js代码怎么做看seo
  • 网站恶意做评论头条新闻 最新消息条
  • 找人做网站设计 哪个平台可以找手机百度2022年新版本下载
  • 网站图片如何做链接黑帽seo
  • 贵阳做网站seo网站安全检测平台