| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【leetcode】189. 轮转数组(C) -> 正文阅读 |
|
[数据结构与算法]【leetcode】189. 轮转数组(C) |
目录 ?189. 轮转数组 - 力扣(LeetCode) (leetcode-cn.com) 题目1.题目描述
2.要求
3.原题链接
二、相关知识点本题实际上涉及到了复杂度的问题,包括时间复杂度和空间复杂度。 三、解决思路思路一:旋转法最优思路,这需要我们有较好的理解力了,可以把数组分为三个部分 假设我们需要选择k个数字: 1.后k个数字逆置 2.前n-k个数字逆置 3.整体逆置 此方法为最优法。符合题目要求 以示例 1为例子说明:
源代码如下:
?注意点:k的大小可能大于数组的大小,所以我们要取模! 这个算法的时间复杂度为O(N),空间复杂度为O(1) 附上结果运行图: ?思路二:直接法看到这道题,我们的第一种想法就是直接去旋转,当k=1是。我们就直接把最后一位的数字移动第一位,然后第二位开始往后移动,我们可以创建一个临时的变量来记录当前的最后一位,当k很大时,我们自然就是用循环去做,这是每个人都能想得到的一种方法 代码如下
遗憾的是,这种算法的空间复杂(k*N),没能跑得过去,超时了,给出运行结果图 ? 思路三?:空间换取时间以空间换取时间,这是比较常见的,就是额外开辟一个数组,存放选择的几个数字,然后将之前的数据存储到该数组的后半部分。最后将新数组拷贝到原来的数组中 代码如下
运行结果如图 虽然也是通过了,但是效率不如思路一。 ?结束语希望这三种思路能够帮到你,给个赞支持一下把 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:58:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |