轮转数组
大约 2 分钟
轮转数组
思路分析
思路一
三次逆序法解决,1、首先将整个数组逆序处理,然后对部分进行逆序处理;2、对【0,k-1】元素进行逆序处理;3、对【k,length[nums]-1】元素进行逆序处理;
代码实现
java实现
/**
* 输入: nums = [1,2,3,4,5,6,7], k = 3 7 6 5 4 3 2 1
* 输出: [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]
* @author yourname
* @date 19:33 2024/12/25
* @param nums
* @param k
**/
public static void rotate(int[] nums, int k) {
if(nums == null || nums.length == 0){
return ;
}
/*首先对整个数组进行反转*/
reverse(nums,0,nums.length-1);
/*反转部分*/
reverse(nums,0,k-1);
reverse(nums,k,nums.length-1);
}
/**
* 数组反转
* @author yourname
* @date 19:33 2024/12/25
* @param nums
* @param start
* @param end
**/
public static void reverse(int nums[],int start,int end){
while (start < end){
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
end--;
start++;
}
}
go实现
func main() {
/*go语言创建数组时候初始元素*/
nums := []int{1, 2, 3, 4, 5, 6, 7}
rotate(nums, 3)
fmt.Println(nums)
}
func rotate(nums []int, k int) {
if nums == nil || len(nums) == 0 {
return
}
/*首先对整个数组进行逆序处理*/
reverse(nums, 0, len(nums)-1)
/*对部分数组进行逆序*/
reverse(nums, 0, k-1)
reverse(nums, k, len(nums)-1)
}
/*实现对数组的逆序处理*/
func reverse(num []int, start int, end int) {
for start < end {
/*原地实现顺序交换*/
num[start], num[end] = num[end], num[start]
start++
end--
}
}