擺動排序 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) 額外空間來實現嗎?
核心思路:
快速選擇 + 3-way-partition + 虛位址
參考:
class solution elseelse if(nums[kk]temp)else if(nums[k]}
result[0] = i+1;//中間相同的數的左邊界
result[1] = j-1;//中間相同的數的右邊界
return result;
}private int getindex(int n,int i)
private void swap(int nums,int l,int r)
}
擺動排序 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...
LeetCode C 擺動排序 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...
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...