演算法 擺動排序 I II

2021-08-14 09:49:52 字數 902 閱讀 3272

給你乙個沒有排序的陣列,請將原陣列就地重新排列滿足如下性質

nums[0] <= nums[1] >= nums[2] <= nums[3]....
允許相鄰元素相等先對陣列進行排序,然後依次把兩兩相鄰的元素進行交換,最終成為乙個波動遞增的數列,滿足題目要求

public void wigglesort(int nums) 

//先對陣列進行排序

arrays.sort(nums);

//取中心軸

int axis = nums.length / 2;

//建立結果陣列

int result = new int[nums.length];

if (nums.length % 2 == 0)

//把後半部分元素正向插入2,4,6...

int k = 1;

for (int i = axis; i < nums.length; i++)

} else

//把後半部分元素正向插入2,4,6...

int k = 1;

for (int i = axis + 1; i < nums.length; i++)

}for (int i=1;i較上一思路,這次採用了從大端到小端的逆向插入

相當於把上乙個思路中的遞增三角形進行了水平翻轉,變成乙個遞減三角形,分成兩半,穿插成乙個波**像

同時也巧妙避開了 4 5 5 6 的問題

擺動排序 II LintCode

給你乙個陣列nums,將它重排列如下形式 nums 0 nums 1 nums 2 nums 3 注意事項 你可以認為每個輸入都有合法解 樣例 給出 nums 1,5,1,1,6,4 一種方案為 1,4,1,5,1,6 給出 nums 1,3,2,2,3,1 一種方案為 2,3,1,3,1,2 思路...

擺動排序 II

擺動排序 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...

擺動排序 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...