旋转数组
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
从指定的长度位,旋转数组
Swift
var newArray: [Int] = []
let array: [Int] = [10, 20, 30, 40, 50, 60]
let k: Int = 3
for i in 0..<array.count {
let j: Int = (i + k) % array.count
print(j, array[j])
newArray.append(array[j])
}
print(array)
print(newArray)
输出如下:
3 40
4 50
5 60
0 10
1 20
2 30
[10, 20, 30, 40, 50, 60]
[40, 50, 60, 10, 20, 30]
newArray为旋转后的数组
将array所有元素替换
var newArray: [Int] = []
var array: [Int] = [10, 20, 30, 40, 50, 60]
let k: Int = 3
for i in 0..<array.count {
let j: Int = (i + k) % array.count
print(j, array[j])
newArray.append(array[j])
}
array.replaceSubrange(0..<array.count, with: newArray)
print(array)
优化一下上面试的实现,采用一个中间数组temp
var array: [Int] = [10, 20, 30, 40, 50, 60]
let temp: [Int] = array
let k: Int = 3
for i in 0..<array.count {
let j: Int = (i + k) % array.count
let ele = temp[j]
print(j, ele)
array.replaceSubrange(i..<i+1, with: [ele])
}
print(array)
函数实现如下
func rotate(_ nums: inout [Int], _ k: Int) {
if k > 0 && k < nums.count {
let temp = nums
for i in 0..<nums.count {
nums.replaceSubrange(i..<i+1, with: [temp[(i+k) % nums.count]])
}
}
}
调用
var nums: [Int] = [1,2,3,4,5,6,7,8]
let k: Int = 3
rotate(&nums, k)
print(nums)
输出
[4, 5, 6, 7, 8, 1, 2, 3]