[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
}