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 輸出 ...