leetcode刷題筆記324題 擺動排序 II

2022-07-10 23:45:08 字數 1819 閱讀 4438

leetcode刷題筆記324題 擺動排序 ii

問題描述:

給定乙個無序的陣列 nums,將它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的順序。

示例 1:

輸入: nums = [1, 5, 1, 1, 6, 4]

輸出: 乙個可能的答案是 [1, 4, 1, 5, 1, 6]

示例 2:

輸入: nums = [1, 3, 2, 2, 3, 1]

輸出: 乙個可能的答案是 [2, 3, 1, 3, 1, 2]

說明:你可以假設所有輸入都會得到有效的結果。

高階:你能用 o(n) 時間複雜度和 / 或原地 o(1) 額外空間來實現嗎?

object solution 

//快速選擇 獲取中位數

//只需對一側遞迴 對於本題而言 另一側需要處理

def quickselect(nums: array[int], left: int, right: int, dest: int): unit =

}swap(nums, i, povit)

val k = i - left + 1

if (dest == i) return

else if (dest < i) quickselect(nums, left, i-1, dest)

else quickselect(nums, i+1, right, dest-i-1)

}//荷蘭國旗問題

//將快速選擇的結果(含一側不確定)分為三部分, 即小於中位數, 等於中位數, 大於中位數三個部分

def partition(nums: array[int], ileft: int, iright: int, midval: int): unit = else if (nums(cur) < midval) else }}

quickselect(nums, 0, length-1, length/2-1)

val mid = nums(length/2)

partition(nums, 0, length-1, mid)

//處理陣列 前半部分倒序插入奇數字 後半部分插入偶數字

val temp = new array[int](nums.size)

array.copy(nums, 0, temp, 0, nums.size)

val k = length/2 - 1

if (length % 2 == 0)

} else

if (length % 2== 1) nums(length-1) = temp(0)}}

}

import "fmt"

func wigglesort(nums int)

} else

nums[len(nums)-1] = temparr[0]

}}func partition(nums int, val int) else if nums[j] < val else

}}func quickselect(nums int, dest int)

pivot := len(nums)-1

i := 0

j := 0

for (j < len(nums)-1) else

}swap(nums, i, pivot)

if i == dest else if i > dest else

}func swap(nums int, i int, j int)

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...

LeetCode刷題筆記

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...