golang_算法: leetcode_数组03-旋转数组

本文介绍了一种在Go语言中实现数组旋转的算法,通过三种不同的方法:直接元素移动、三次反转和使用额外空间,详细解释了每种方法的实现过程及优缺点,旨在帮助读者理解并掌握数组旋转算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import "fmt"

//空间复杂度为 O(1) ,不能使用其它数组
////设计算法:
////1.新建空间,将后k位数截取,后k位和前面的数字分别添加到新空间
//func rotate1(nums []int, k int) {
//	var arr []int
//	l := len(nums)
//	arr = append(nums[(l-k):], nums[:l-k]...)
//	nums = arr
//	fmt.Println(nums)
//}
//
////2.将前l-k添加最后,截取从l-k位后l位的数组
//func rotate2(nums []int, k int) {
//	l := len(nums)
//	arr := append(nums, nums[:l-k]...)
//	nums = arr
//	fmt.Println(arr)
//	//fmt.Println(nums[l-k:])
//}
//
////3.前l-k位数下标+k,后k位数下标-k

//1.将最后一位数存在一个临时变量里,其它数右移一位,然后重复上面操作
func rotate4(nums []int, k int) {
	l := len(nums) //7
	for i := 0; i < k; i++ {
		tmp := nums[l-1]
		for j := l - 1; j > 0; j-- {
			nums[j] = nums[j-1]
		}
		nums[0] = tmp
	}
	fmt.Println(nums)
}

//2.进行3次反转,第一次整体反转,第二次前k个反转,第三次后l-k个反转
func rotate5(nums []int, k int) {
	l := len(nums)
	k = k % l
	reverse(nums,0,l-1)
	reverse(nums,0,k-1)
	reverse(nums,k,l-1)
}

func reverse(nums []int, i, j int) {
	for i < j {
		nums[i], nums[j] = nums[j], nums[i]
		i++
		j--
	}
}

func main() {
	nums := []int{1, 2, 3, 4, 5, 6, 7}
	var k int = 3
	//rotate4(nums, k)
	rotate5(nums, k)

	fmt.Println(nums)
}

Output:

[5 6 7 1 2 3 4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值