go实现leetcode旋转数组

目标:旋转数组

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。


结果产出:

这里先使用最简单的循环改变,执行结果显示超时,经行优化,k取模以后仍旧超时,考虑应该是操作数组浪费了太多时间。

func rotate(nums []int, k int)[]int  {
	for i :=0;i<k;i++{
		a := nums[(len(nums)-1)]
		for j := len(nums)-1;j>0;j--{
			nums[j] = nums[j-1]
		}
		nums[0]=a
	}
	return  nums
}

使用临时数组,计算出每个元素的位置,然后重新添加到新的数组中去。

这里遇到问题,leetcode一直检测失败,查看逻辑应该没有问题,然后在自己电脑上运行显示没有问题。这是因为他直接检测了nums数组,而不是对返回值经行检测。

func rotate(nums []int, k int)[]int  {
	var nums1 = make([]int,len(nums))
	k = k%len(nums)
	for j :=0;j<len(nums);j++ {
		if j+k<len(nums) {
			nums1[j+k]=nums[j]
		}else {
			nums1[(j+k)%len(nums)]=nums[j]
		}
	}
	return  nums1
}

修改以后

执行用时:28 ms, 在所有 Go 提交中击败了26.28%的用户

内存消耗:7.9 MB, 在所有 Go 提交中击败了45.76%的用户

func rotate(nums []int, k int){
	var nums1 = make([]int,len(nums))
	k %= len(nums)
	for j :=0;j<len(nums);j++ {
		if j+k<len(nums) {
			nums1[j+k]=nums[j]
		}else {
			nums1[(j+k)%len(nums)]=nums[j]
		}
	}
    for j :=0;j<len(nums);j++ {
        nums[j] =nums1[j]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值