class Solution { public void wiggleSort(int[] nums) { int[] temp = Arrays.copyOfRange(nums, 0, nums.length); Arrays.sort(temp); int large = temp.length / 2 + (temp.length % 2 == 0 ? -1 : 0); int small = temp.length - 1; for (int i = 0, j = 1; i < temp.length; i+=2, j+=2) { if(j < temp.length) nums[j] = temp[small--]; nums[i] = temp[large--]; } } }
补充一个python的版本:
1 class Solution: 2 def wiggleSort(self, nums: 'List[int]') -> None: 3 temp = sorted(nums) 4 n = len(nums) 5 mid = n // 2 + n % 2 6 p1 = temp[:mid] 7 p2 = temp[mid:] 8 i = 0 9 j = 0 10 k = 0 11 while k < n: 12 if k % 2 == 0: 13 temp[k] = p1[i] 14 k += 1 15 i += 1 16 else: 17 temp[k] = p2[j] 18 k += 1 19 j += 1 20 print(temp) 21 for i in range(1,n): 22 if temp[i-1] == temp[i]: 23 nums.clear() 24 nums.extend(temp[i:]) 25 nums.extend(temp[:i]) 26 print(nums) 27 return 28 nums.clear() 29 nums.extend(temp)