华为机试题---数组移位
来源:互联网 发布:js代码格式化插件 编辑:程序博客网 时间:2024/05/22 17:15
一、问题描述
功能描述:数组的循环移位,
输入:{a,b,c},2
输出:{b,c,a}
要求实现方法:
/**
*data :待循环数组
*index:移动位数
*/
public String[] getChildren(String[] data,int index)
{
//TODO
return null;
}
二、算法分析
考虑一下数组A中元素123456循环右移2位到, 可以将数组A分成两个部分:A[0~n-k-1] 和 A[n-k~n-1] ,将这两个部分分别翻转,然后放在一起在翻转(逆序)。具体是这样的:
在上面例题中,n = 3, k = 2, 故第一部分为: A[0] = a A[1-2] = b.c
(1)翻转a:由于一个数就不翻转 (先翻转前部分)
(2)翻转bc: abc ---> acb (再翻转后半部分)
(3)翻转acb:acb ---> bca (从后到前都翻转)
三、算法
//逆序public void Reverse(String A[],int from,int to){ for(;from < to;from++,to--) { String temp = A[from]; A[from] = A[to]; A[to] = temp; }}//循环右移public void RightShift(String A[],int n,int k){ Reverse(A,0,n-k-1); Reverse(A,n-k,n-1); Reverse(A,0,n-1);}
四、测试
package com.albertshao.csi.interview;/** * @author albertshao * */public class Main20 {public static void main(String[] args) {Main20 m = new Main20();String [] data = {"a","b","c","d","e"};m.RightShift(data,data.length, 2);}//逆序public void Reverse(String A[],int from,int to){ for(;from < to;from++,to--) { String temp = A[from]; A[from] = A[to]; A[to] = temp; }}//循环右移public void RightShift(String A[],int n,int k){ Reverse(A,0,n-k-1); print(A); Reverse(A,n-k,n-1); print(A); Reverse(A,0,n-1); print(A);}public void print(String A[]) {for (int i = 0; i < A.length; i++) {System.out.print(A[i] + " ");}System.out.println();}}
测试结果
c b a d e c b a e d d e a b c
0 0
- 华为机试题---数组移位
- 华为机试——数组循环移位
- 华为机试题---二维数组的转置
- 华为机试题---二维数组的转置
- 华为机试题【13】-wave数组找字母游戏
- 华为机试题
- 2011 华为机试题
- 华为机试题
- 华为机试题
- 2013华为机试题
- 华为机试题
- 华为2013机试题
- 华为2012机试题
- 华为机试题
- 【华为机试题】1
- 华为C++机试题
- 华为2014机试题
- 华为2014机试题
- struts2的关于method=“{1}"意思详解
- 育儿心得--我在育儿路上的一点体会
- Kinect for windows SDK 简介
- 三年
- 《黑马程序员》 通过反射获取字节码文件中的字段
- 华为机试题---数组移位
- 以防万一,免费下载格式转换器备不时之需
- C++ map中删除一个元素的处理
- box2d 初识 强大的物理碰撞引擎 结合canvas
- 工作室的一些规范或杂乱
- 蓝牙设计
- 编码格式的转换与使用
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- volatile与barrier指令阻止过度优化