相关文章推荐
腹黑的弓箭  ·  React报错之map() is not ...·  1 周前    · 
灰常酷的蘑菇  ·  检查给定数组索引是否存在json键?开发者社区·  1 周前    · 
光明磊落的蚂蚁  ·  李妍峰-西南交大经济管理学院·  2 年前    · 
挂过科的杯子  ·  java中cmd管道通信关于Buffered ...·  2 年前    · 
玩篮球的跑步机  ·  在JS中将数组的字符串转换为数组 - 问答 ...·  2 年前    · 
爱吹牛的烤红薯  ·  shell - awk command ...·  2 年前    · 
Code  ›  一个优雅的反转数组的算法开发者社区
算法 遍历 数组
https://cloud.tencent.com/developer/article/1176229
严肃的柚子
2 年前
作者头像
我是攻城师
0 篇文章

一个优雅的反转数组的算法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 我是攻城师 > 一个优雅的反转数组的算法

一个优雅的反转数组的算法

作者头像
我是攻城师
发布 于 2018-08-03 11:00:33
775 0
发布 于 2018-08-03 11:00:33
举报

反转数组指的是把一个倒置,如下:

原始数组:

[1,11,4,2]

` 反转后的数组:

[2,4,11,1]

` 比较简单粗暴的方法是,遍历原始数组从最后一项向前遍历,然后把输出结果保存在一个新的数组里面,这样就完成了所谓的反转。

虽然方法行的通,但性能却一般,更好的办法是通过交换实现,即第一项与最后一项交换,第二项与倒数第二项交换,依次类推,只需要遍历数组的一半的大小交换,就可以完成反转。这种思路有点类似于高斯求和的理论,只不过那里面是相加,我们这里是交换,其中:

遍历的次数=数组的长度/2

这里不分数组的长度是偶数还是奇数,如果是奇数那么中间的一位数是不需要交换的,如果是偶数则刚好对半交换,所以这里交换的次数总是等于(len/2),注意计算机算len/2都是舍一取整:

10/3=3
9/3=3

所以这里刚好就是交换的次数,利用这种方式完成交换比较简单优雅,同时不需要新生成数组空间,直接在原数组上改动即可。

Java版本代码如下:

static void reverseArray(){
        int array[]={1,2,5,4};
        System.out.println("原始数组:"+Arrays.toString(array));
        //数组的长度
        int n=array.length;
        //只需要循环长度的一半的次数即可完成反转
        for (int j = 0; j <n/2 ; j++) {
            int temp=array[j];//获取前半部分数组的每一个元素
 
推荐文章
腹黑的弓箭  ·  React报错之map() is not a function - chuckQu
1 周前
灰常酷的蘑菇  ·  检查给定数组索引是否存在json键?开发者社区
1 周前
光明磊落的蚂蚁  ·  李妍峰-西南交大经济管理学院
2 年前
挂过科的杯子  ·  java中cmd管道通信关于BufferedWriter指定编码为GBK并调用Bandizip后BufferedReader读不到东西的问题-编程语言-CSDN问答
2 年前
玩篮球的跑步机  ·  在JS中将数组的字符串转换为数组 - 问答 - 腾讯云开发者社区-腾讯云
2 年前
爱吹牛的烤红薯  ·  shell - awk command to convert date format in a file - Stack Overflow
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号