数组的循环右移问题(好未来笔试题)
来源:互联网 发布:50岁护肤品推荐知乎 编辑:程序博客网 时间:2024/06/07 19:16
问题描述:给定一个整数数组,长度为n,现在要求该数组循环右以m个元素。
例如,数组为{1,2,3,4,5,6,7,8,9},循环右移3个元素后为变成{7,8,9,1,2,3,4,5,6}
分析:这是我曾经参加好未来笔试时的一道编程题目,考完试后,总结了以下几种解法,给大家分享下。
解法一:辅助空间法,思路很简单,就是另外开辟一块和原来数组一样大小的空间。然后先把原来数组的最后面的m个元素复制到
新数组的前面,然后再把原来数组的前面的元素复制到新数组的后面,最后再把新数组的全部元素复制到原来的数组中,即可。
该方法很容易被想到,但是需要额外的辅助空间。
解法二:三步操作法。
第一步:将原来数组全部反序。
第二步:再将前m个元素反序。
第三步:最后将后面的元素反序。
解法二不需要额外的辅助空间,是更好的解法。
由于解法一很简单,我就不再些具体的代码了,针对解法二,写出了如下Java代码:
public class Main { public static void reverse(int a[],int i,int j){ //用来实现反序 int t; while(i<j) { t=a[i]; a[i]=a[j]; a[j]=t; i++;j--; } } public static void adjust(int a[],int m){ //实现右移位if(a==null){ //如果数组为空,则直接退出System.out.println("数组不存在");return;}if(m<0 ||m>a.length){ //如果数组不合法则直接退出System.out.println("m的范围不对,不合法");return;} reverse(a,0,a.length-1); //第一步:全部反序 reverse(a,0,m-1); //第二步:再反序前m个数 reverse(a,m,a.length-1); //第三步:最后反序后面的a.length-m个数 }public static void main(String[] args) {// TODO 自动生成的方法存根int a[]={1,2,3,4,5,6,7,8,9};int m=3;System.out.print("原数组为:");for(int i=0;i<a.length;i++) System.out.print(a[i]+",");System.out.println(); adjust(a,m); System.out.print("右移动"+m+"个后为:"); for(int i=0;i<a.length;i++) System.out.print(a[i]+",");}}
输出结果为:
原数组为:1,2,3,4,5,6,7,8,9,
右移动3个后为:7,8,9,1,2,3,4,5,6,
0 0
- 数组的循环右移问题(好未来笔试题)
- 数组循环右移问题
- 数组的循环右移
- 数组的循环右移
- 数组的循环右移
- 数组的循环右移
- 数组的循环右移
- 数组的循环右移
- 一道关于循环右移的笔试题
- 其他笔试题:字符串的循环右移
- 求链表的第一个公共节点问题(好未来笔试题)
- PAT乙级题1008.数组元素循环右移问题
- pat(B) 1008. 数组元素循环右移问题
- (乙)1008. 数组元素循环右移问题
- PAT(乙级)1008. 数组元素循环右移问题
- 1008数组元素循环右移问题(模拟)
- 数组元素循环左/右移问题
- 数组元素循环右移问题
- TFS不提供team foundation服务 不能显示页面及简单安装Team Foundation Service方法
- 演艺现场网络直播碰到的问题
- Spring提供的DomUtils解析工具
- Thinking in Spring
- XMG 画柱状图
- 数组的循环右移问题(好未来笔试题)
- CCS+GPRS+SIM900A模块
- PHP错误和异常处理
- 基本数据结构:链表(list)
- 单源最短路径
- 《Apache Kafka》学习笔记
- 【Java故事系列】Java开发环境的过去、现在和将来
- 条理清晰的搭建SSH环境
- 奔跑吧攻城狮 第一篇