【发布时间】:2023-03-18 16:04:01
【问题描述】:
在 Swift 中探索算法时,如果不使用 funcs shiftLeft / shiftRight,在 swift 中找不到数组旋转算法。
C 有这个优雅的算法,时间复杂度为 O(N):
/* Function to left rotate arr[] of size n by d */
void leftRotate(int arr[], int d, int n)
{
rvereseArray(arr, 0, d-1);
rvereseArray(arr, d, n-1);
rvereseArray(arr, 0, n-1);
}
/*Function to reverse arr[] from index start to end*/
void rvereseArray(int arr[], int start, int end)
{
int temp;
while (start < end)
{
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
我正在努力将其转换为 swift:
func rotate(array:[Int], positions:Int, arSize:Int) {
var a = array
var p = positions
var s = arSize
reverseArray(array: a, start: 0, end: p-1)
reverseArray(array: a, start: p, end: s-1)
reverseArray(array: a, start: 0, end: s-1)
}
func reverseArray(array: [Int], start:Int, end:Int) {
var a = array
var s = start
var e = end
var temp = 0
while s < e {
temp = a[s]
a[s] = a[e]
a[e] = temp
s += 1
e -= 1
}
}
据我了解,对于 swift,我们需要指定返回类型。 如何在不增加空间(内存)复杂性的情况下配置它们? (又名,不创建新的临时数组)
这个问题与其他问题不同,因为它是关于 returns 与 C 相比如何在 swift 中工作。
【问题讨论】:
-
你的意思是要创建一个变异方法?
-
只是一个数组旋转的方法。
-
现在我明白
mutating的真正含义了。