博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA算法:旋转数组元素(Rotate Array)JAVA版本求解
阅读量:4039 次
发布时间:2019-05-24

本文共 1415 字,大约阅读时间需要 4 分钟。

JAVA算法:旋转数组元素(Rotate Array)JAVA版本求解

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3

输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入: [-1,-100,3,99] 和 k = 2

输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:

尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。

要求使用空间复杂度为 O(1) 的原地算法。


算法分析

输入是[1,2,3,4,5,6,7]和k = 3,那么翻转需要如下三部:

翻转[1,2,3,4]部分,得到[4,3,2,1,5,6,7]

翻转[5,6,7]部分,得到[4,3,2,1,7,6,5]
翻转整个数组,得到[5,6,7,1,2,3,4],也就是最终答案
可以看到这种方法,只要写一个翻转数组的函数,然后调用三次即可。

算法设计

package com.bean.algorithm.basic;public class RotateArray {		public void rotate(int[] nums, int k) {        if (nums.length == 0 || nums.length == 1 || k % nums.length == 0)            return;        k %= nums.length;        int length = nums.length;        reverse(nums, 0, length - k - 1);        reverse(nums, length - k, length - 1);        reverse(nums, 0, length - 1);    }    private void reverse(int[] nums, int begin, int end) {        for (int i = 0; i < (end - begin + 1) / 2; i++) {            int temp = nums[begin + i];            nums[begin + i] = nums[end - i];            nums[end - i] = temp;        }    }	public static void main(String[] args) {		// TODO Auto-generated method stub		RotateArray rotateArray=new RotateArray();				int[] array=new int[] {1,2,3,4,5,6,7};		int k=3;				rotateArray.rotate(array, k);		for(int i=0;i

程序运行结果:

5 6 7 1 2 3 4 

 

转载地址:http://citdi.baihongyu.com/

你可能感兴趣的文章
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
[LeetCode By MYSQL] Combine Two Tables
查看>>
[Leetcode BY python ]190. Reverse Bits
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
Phone双模修改涉及文件列表
查看>>
android UI小知识点
查看>>
Android之TelephonyManager类的方法详解
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>