摘要:每隔兩位交換一次,如,處理為。難點是會有相等的元素,而要求相鄰元素除了外,不能相等。那么就不能取排序后相鄰的元素交換,而要和后面的元素交換。例如犧牲空間的做法是,建立一個新數組,按照我們想要的規律放入元素,最后回原數組。
Wiggle Sort Problem
Given an unsorted array nums, reorder it in-place such that
nums[0] <= nums[1] >= nums[2] <= nums[3]....
ExampleGiven nums = [3, 5, 2, 1, 6, 4], one possible answer is [1, 6, 2, 5, 3, 4].
Note每隔兩位交換一次,如【1 2 3 4 5 6】,處理為【1 3 2 5 4 6】。
Solutionpublic class Solution { public void wiggleSort(int[] nums) { Arrays.sort(nums); for (int i = 2; i < nums.length; i+=2) { int temp = nums[i]; nums[i] = nums[i-1]; nums[i-1] = temp; } return; } }Wiggle Sort II Problem
Given an unsorted array nums, reorder it such that
nums[0] < nums[1] > nums[2] < nums[3]....
ExampleGiven nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].
Note難點是會有相等的元素,而要求相鄰元素除了wiggle外,不能相等。
那么就不能取排序后相鄰的元素交換,而要和后面的元素交換。例如:
//1 2 3 4 5 6 //3 6 2 5 1 4
犧牲空間的做法是,建立一個新數組temp,按照我們想要的規律放入元素,最后copy回原數組nums。
簡單的思路就是,假設nums里有n個數,我們循環n/2次或者n/2+1次,每次循環里為temp添加兩個數(n為奇數時,最后一次循環只添加一個數)。最后用System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length).
public class Solution { public void wiggleSort(int[] nums) { Arrays.sort(nums); int n = nums.length, mid = (n-1)/2, index = 0; int[] temp = new int[n]; for (int i = 0; i <= mid; i++) { temp[index] = nums[mid-i]; if (index+1 < n) { temp[index+1] = nums[n-1-i]; } index += 2; } System.arraycopy(temp, 0, nums, 0, n); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66188.html
摘要:如果沒復雜度的要求,先也可以,再交叉放入數字也可以。交叉的時候注意是按照,降序的。 Wiggle Sort 題目鏈接:https://leetcode.com/problems... 這道題允許等號,相對簡單,有兩種方法:1. sort然后交換奇數位和它下一位的元素,2. 不滿足條件的時候直接交換 可以用遞推來說明一下這么做的正確性: 假設到第i位之前都滿足題目要求的關系 現在比較...
摘要:就能滿足題目要求。代碼先將數組排序將數組中一對一對交換交換法復雜度時間空間思路題目對搖擺排序的定義有兩部分如果是奇數,如果是偶數,所以我們只要遍歷一遍數組,把不符合的情況交換一下就行了。 Wiggle Sort Given an unsorted array nums, reorder it in-place such that nums[0] = nums[2] = nums[i ...
Problem Given an unsorted array nums, reorder it in-place such that nums[0] = nums[2] nums[i-1]) swap(nums, i, i-1); } } } private void swap(int[] nums, int i, int j) { ...
摘要:題目要求扭動序列是指數組中的相鄰兩個元素的差保證嚴格的正負交替,如數組中相鄰兩個元素的差為,滿足扭動序列的要求。現在要求從一個數組中,找到長度最長的扭動子序列,并返回其長度。即前一個元素和當前元素構成下降序列,因此代碼如下 題目要求 A sequence of numbers is called a wiggle sequence if the differences between ...
摘要:最后,將動畫函數選為。的表現狀態就是起止過程比較緩慢,中間過渡迅速。褪色效果首先,添加一個褪色的過渡。通過百分比的方式指定動畫的進度相對于初始位置右移。同時希望動畫持續秒的時長,采用的動畫效果。 CSS不一定要寫得多么復雜才能實現特殊效果。如下就是三個超級簡單的過渡的例子,可能只是幾行代碼,但是添加到Web應用程序中,卻會讓它增色不少。showImg(https://segmentfa...
閱讀 1117·2023-04-26 03:02
閱讀 1161·2023-04-25 19:18
閱讀 2583·2021-11-23 09:51
閱讀 2561·2021-11-11 16:55
閱讀 2614·2021-10-21 09:39
閱讀 1694·2021-10-09 09:59
閱讀 1991·2021-09-26 09:55
閱讀 3512·2021-09-26 09:55