[LeetCode-Eazy] Shuffle the Array
Golang
Given the array nums consisting of 2n elements in the form [x1,x2,...,xn,y1,y2,...,yn].
Return the array in the form [x1,y1,x2,y2,...,xn,yn].
Example 1:
Input: nums = [2,5,1,3,4,7], n = 3
Output: [2,3,5,4,1,7]
Explanation: Since x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 then the answer is [2,3,5,4,1,7].
把 array 用別種方式組合後返回
想法很單純,loop 目標陣列 設定兩個指標和兩個計數器
第一個指標來得到 x
的值後 +2
第二個指標得到 y
的值也要 +2
第二個指標從 1 開始因為 y 基本上都是陣列中 1 的位置
我個人認為我的寫法非常的蠢...
func shuffle(nums []int, n int) []int {
if n == 1 {
return nums
}
r := make([]int, len(nums))
t1, t2, f := 0, 0, 0
s := 1
for _, v := range nums {
if t1 < n {
if f == 0 {
r[f] = v
} else {
r[f + 1] = v
f++
}
f++
t1++
continue
}
if t2 <= n {
if s == 1 {
r[s] = v
} else {
r[s + 1] = v
s++
}
s++
t2++
}
}
return r
}
查了一下看到別人的寫法好多了
loop 的次數少我一半,不過 result 出來的結果跟我上面的差不多
可能 append 會吃一些效能
先創建一個 array
for loop n 的次數
每 loop 一次就把當前的 i 和 i + n的值丟進去 result array
func shuffle(nums []int, n int) []int {
r := make([]int, 0, 2*n)
for i := 0; i < n; i++ {
r = append(r, nums[i])
r = append(r, nums[i + n])
}
return r
}