1 Star 0 Fork 0

geekplayers/Leetcode-301-600

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
Interval.java
ListNode.java
Node.java
README.md
TreeNode.java
_301_RemoveInvalidParentheses.java
_302_SmallestRectangleEnclosingBlackPixels.java
_303_RangeSumQueryImmutable.java
_304_RangeSumQuery2DImmutable.java
_305_NumberofIslandsII.java
_306_AdditiveNumber.java
_307_RangeSumQueryMutable.java
_308_RangeSumQuery2DMutable.java
_309_BestTimetoBuyandSellStockwithCooldown.java
_310_MinimumHeightTrees.java
_311_SparseMatrixMultiplication.java
_312_BurstBalloons.java
_313_SuperUglyNumber.java
_314_BinaryTreeVerticalOrderTraversal.java
_315_CountofSmallerNumbersAfterSelf.java
_316_RemoveDuplicateLetters.java
_317_ShortestDistancefromAllBuildings.java
_318_MaximumProductofWordLengths.java
_319_BulbSwitcher.java
_320_GeneralizedAbbreviation.java
_321_CreateMaximumNumber.java
_322_CoinChange.java
_323_NumberofConnectedComponentsinanUndirectedGraph.java
_324_WiggleSortII.java
_325_MaximumSizeSubarraySumEqualsk.java
_326_PowerofThree.java
_327_CountofRangeSum.java
_328_OddEvenLinkedList.java
_329_LongestIncreasingPathinaMatrix.java
_330_PatchingArray.java
_331_VerifyPreorderSerializationofaBinaryTree.java
_332_ReconstructItinerary.java
_333_LargestBSTSubtree.java
_334_IncreasingTripletSubsequence.java
_335_SelfCrossing.java
_336_PalindromePairs.java
_337_HouseRobberIII.java
_338_CountingBits.java
_339_NestedListWeightSum.java
_340_LongestSubstringwithAtMostKDistinctCharacters.java
_341_FlattenNestedListIterator.java
_342_PowerofFour.java
_343_IntegerBreak.java
_344_ReverseString.java
_345_ReverseVowelsofaString.java
_346_MovingAveragefromDataStream.java
_347_TopKFrequentElements.java
_348_DesignTicTacToe.java
_349_IntersectionofTwoArrays.java
_350_IntersectionofTwoArraysII.java
_351_AndroidUnlockPatterns.java
_352_DataStreamasDisjointIntervals.java
_353_DesignSnakeGame.java
_354_RussianDollEnvelopes.java
_355_DesignTwitter.java
_356_LineReflection.java
_357_CountNumberswithUniqueDigits.java
_358_RearrangeStringkDistanceApart.java
_359_LoggerRateLimiter.java
_360_SortTransformedArray.java
_361_BombEnemy.java
_362_DesignHitCounter.java
_363_MaxSumofRectangleNoLargerThanK.java
_364_NestedListWeightSumII.java
_365_WaterandJugProblem.java
_366_FindLeavesofBinaryTree.java
_367_ValidPerfectSquare.java
_368_LargestDivisibleSubset.java
_369_PlusOneLinkedList.java
_370_RangeAddition.java
_371_SumofTwoIntegers.java
_372_SuperPow.java
_373_FindKPairswithSmallestSums.java
_374_GuessNumberHigherorLower.java
_375_GuessNumberHigherorLowerII.java
_376_WiggleSubsequence.java
_377_CombinationSumIV.java
_378_KthSmallestElementinaSortedMatrix.java
_379_DesignPhoneDirectory.java
_380_InsertDeleteGetRandom.java
_381_InsertDeleteGetRandomDuplicatesallowed.java
_382_LinkedListRandomNode.java
_383_RansomNote.java
_384_ShuffleanArray.java
_385_MiniParser.java
_386_LexicographicalNumbers.java
_387_FirstUniqueCharacterinaString.java
_388_LongestAbsoluteFilePath.java
_389_FindtheDifference.java
_390_EliminationGame.java
_391_PerfectRectangle.java
_392_IsSubsequence.java
_393_UTF8Validation.java
_394_DecodeString.java
_395_LongestSubstringwithAtLeastKRepeatingCharacters.java
_396_RotateFunction.java
_397_IntegerReplacement.java
_398_RandomPickIndex.java
_399_EvaluateDivision.java
_400_NthDigit.java
_401_BinaryWatch.java
_402_RemoveKDigits.java
_403_FrogJump.java
_404_SumofLeftLeaves.java
_405_ConvertaNumbertoHexadecimal.java
_406_QueueReconstructionbyHeight.java
_407_TrappingRainWaterII.java
_408_ValidWordAbbreviation.java
_409_LongestPalindrome.java
_410_SplitArrayLargestSum.java
_411_MinimumUniqueWordAbbreviation.java
_412_FizzBuzz.java
_413_ArithmeticSlices.java
_414_ThirdMaximumNumber.java
_415_AddStrings.java
_416_PartitionEqualSubsetSum.java
_417_PacificAtlanticWaterFlow.java
_418_SentenceScreenFitting.java
_419_BattleshipsinaBoard.java
_420_StrongPasswordChecker.java
_421_MaximumXORofTwoNumbersinanArray.java
_422_ValidWordSquare.java
_423_ReconstructOriginalDigitsfromEnglish.java
_424_LongestRepeatingCharacterReplacement.java
_425_WordSquares.java
_425_WordSquares2.java
_426_ConvertBinarySearchTreetoSortedDoublyLinkedList.java
_427_ConstructQuadTree.java
_428_SerializeandDeserializeNaryTree.java
_429_NaryTreeLevelOrderTraversal.java
_430_FlattenaMultilevelDoublyLinkedList.java
_431_EncodeNaryTreetoBinaryTree.java
_432_AllOoneDataStructure.java
_433_MinimumGeneticMutation.java
_434_NumberofSegmentsinaString.java
_435_NonoverlappingIntervals.java
_436_FindRightInterval.java
_437_PathSumIII.java
_438_FindAllAnagramsinaString.java
_439_TernaryExpressionParser.java
_440_KthSmallestinLexicographicalOrder.java
_441_ArrangingCoins.java
_442_FindAllDuplicatesinanArray.java
_443_StringCompression.java
_444_SequenceReconstruction.java
_444_SequenceReconstruction2.java
_445_AddTwoNumbersII.java
_446_ArithmeticSlicesIISubsequence.java
_447_NumberofBoomerangs.java
_448_FindAllNumbersDisappearedinanArray.java
_449_SerializeandDeserializeBST.java
_450_DeleteNodeinaBST.java
_451_SortCharactersByFrequency.java
_452_MinimumNumberofArrowstoBurstBalloons.java
_453_MinimumMovestoEqualArrayElements.java
_454_FourSumII.java
_455_AssignCookies.java
_456_132Pattern.java
_457_CircularArrayLoop.java
_458_PoorPigs.java
_459_RepeatedSubstringPattern.java
_460_LFUCache.java
_461_HammingDistance.java
_462_MinimumMovestoEqualArrayElementsII.java
_463_IslandPerimeter.java
_464_CanIWin.java
_465_OptimalAccountBalancing.java
_466_CountTheRepetitions.java
_467_UniqueSubstringsinWraparoundString.java
_468_ValidateIPAddress.java
_469_ConvexPolygon.java
_470_ImplementRand10UsingRand7.java
_471_EncodeStringwithShortestLength.java
_472_ConcatenatedWords.java
_472_ConcatenatedWords2.java
_473_MatchstickstoSquare.java
_474_OnesandZeroes.java
_475_Heaters.java
_476_NumberComplement.java
_477_TotalHammingDistance.java
_478_GenerateRandomPointinaCircle.java
_479_LargestPalindromeProduct.java
_480_SlidingWindowMedian.java
_480_SlidingWindowMedian2.java
_481_MagicalString.java
_482_LicenseKeyFormatting.java
_483_SmallestGoodBase.java
_484_FindPermutation.java
_485_MaxConsecutiveOnes.java
_486_PredicttheWinner.java
_487_MaxConsecutiveOnesII.java
_488_ZumaGame.java
_489_RobotRoomCleaner.java
_490_TheMaze.java
_491_IncreasingSubsequences.java
_492_ConstructTheRectangle.java
_493_ReversePairs.java
_494_TargetSum.java
_495_TeemoAttacking.java
_496_NextGreaterElementI.java
_497_RandomPointinNonoverlappingRectangles.java
_498_DiagonalTraverse.java
_499_TheMazeIII.java
_499_TheMazeIII2.java
_500_KeyboardRow.java
_501_FindModeinBinarySearchTree.java
_502_IPO.java
_503_NextGreaterElementII.java
_504_Base7.java
_505_TheMazeII.java
_506_RelativeRanks.java
_507_PerfectNumber.java
_508_MostFrequentSubtreeSum.java
_509_FibonacciNumber.java
_513_FindBottomLeftTreeValue.java
_514_FreedomTrail.java
_515_FindLargestValueinEachTreeRow.java
_516_LongestPalindromicSubsequence.java
_517_SuperWashingMachines.java
_518_CoinChange2.java
_519_RandomFlipMatrix.java
_520_DetectCapital.java
_521_LongestUncommonSubsequenceI.java
_522_LongestUncommonSubsequenceII.java
_523_ContinuousSubarraySum.java
_524_LongestWordinDictionarythroughDeleting.java
_525_ContiguousArray.java
_526_BeautifulArrangement.java
_527_WordAbbreviation.java
_527_WordAbbreviation2.java
_528_RandomPickwithWeight.java
_529_Minesweeper.java
_530_MinimumAbsoluteDifferenceinBST.java
_531_LonelyPixelI.java
_532_KdiffPairsinanArray.java
_533_LonelyPixelII.java
_535_EncodeAndDecodeTinyURL.java
_536_ConstructBinaryTreefromString.java
_537_ComplexNumberMultiplication.java
_538_ConvertBSTtoGreaterTree.java
_539_MinimumTimeDifference.java
_540_SingleElementinaSortedArray.java
_541_ReverseStringII.java
_542_01Matrix.java
_543_DiameterofBinaryTree.java
_544_OutputContestMatches.java
_545_BoundaryofBinaryTree.java
_546_RemoveBoxes.java
_547_FriendCircles.java
_548_SplitArraywithEqualSum.java
_549_BinaryTreeLongestConsecutiveSequenceII.java
_551_StudentAttendanceRecordI.java
_552_StudentAttendanceRecordII.java
_553_OptimalDivision.java
_554_BrickWall.java
_555_SplitConcatenatedStrings.java
_556_NextGreaterElementIII.java
_557_ReverseWordsinaStringIII.java
_558_QuadTreeIntersection.java
_559_MaximumDepthofNaryTree.java
_560_SubarraySumEqualsK.java
_561_ArrayPartitionI.java
_562_LongestLineofConsecutiveOneinMatrix.java
_562_LongestLineofConsecutiveOneinMatrix2.java
_563_BinaryTreeTilt.java
_564_FindtheClosestPalindrome.java
_565_ArrayNesting.java
_566_ReshapetheMatrix.java
_567_PermutationinString.java
_568_MaximumVacationDays.java
_572_SubtreeofAnotherTree.java
_573_SquirrelSimulation.java
_575_DistributeCandies.java
_576_OutofBoundaryPaths.java
_581_ShortestUnsortedContinuousSubarray.java
_582_KillProcess.java
_583_DeleteOperationforTwoStrings.java
_587_ErecttheFence.java
_588_DesignInMemoryFileSystem.java
_589_NaryTreePreorderTraversal.java
_590_NaryTreePostorderTraversal.java
_591_TagValidator.java
_592_FractionAdditionandSubtraction.java
_593_ValidSquare.java
_594_LongestHarmoniousSubsequence.java
_598_RangeAdditionII.java
_599_MinimumIndexSumofTwoLists.java
_600_NonnegativeIntegerswithoutConsecutiveOnes.java
克隆/下载
_324_WiggleSortII.java 3.74 KB
一键复制 编辑 原始数据 按行查看 历史
Cspiration 提交于 6年前 . Add files via upload
package leetcode_1To300;
import java.util.Arrays;
/**
* 本代码来自 Cspiration,由 @Cspiration 提供
* 题目来源:http://leetcode.com
* - Cspiration 致力于在 CS 领域内帮助中国人找到工作,让更多海外国人受益
* - 现有课程:Leetcode Java 版本视频讲解(1-900题)(上)(中)(下)三部
* - 算法基础知识(上)(下)两部;题型技巧讲解(上)(下)两部
* - 节省刷题时间,效率提高2-3倍,初学者轻松一天10题,入门者轻松一天20题
* - 讲师:Edward Shi
* - 官方网站:https://cspiration.com
* - 版权所有,转发请注明出处
*/
public class _324_WiggleSortII {
/**
* 324. Wiggle Sort II
* Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]....
Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].
Note:
You may assume all input has valid answer.
Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?
time : O(nlogn)
space : O(n)
* @param nums
*/
public void wiggleSort(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int mid = (n - 1) / 2;
int 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);
}
/**
Original idx: 0 1 2 3 4 5
Mapped idx: 1 3 5 0 2 4
Array: 13 6 4 5 2 5
5 6 4 13 2 5
r
i
l
median = 5
nums[] = 5
大于中位数,左 - 右,奇
小于中位数,右 - 左,偶
time : O(n)
space : O(1)
* @param nums
*/
public void wiggleSort2(int[] nums) {
int median = findKthLargest(nums, (nums.length + 1) / 2);
int n = nums.length;
int left = 0, right = n - 1;
int index = 0;
while (index <= right) {
if (nums[newIndex(index, n)] > median) {
swap(nums, newIndex(left++, n), newIndex(index++, n));
} else if (nums[newIndex(index, n)] < median) {
swap(nums, newIndex(right--, n), newIndex(index, n));
} else {
index++;
}
}
}
private int newIndex(int index, int n) {
return (1 + 2 * index) % (n | 1);
}
public int findKthLargest(int[] nums, int k) {
if (nums == null || nums.length == 0) return 0;
int left = 0;
int right = nums.length - 1;
while (true) {
int pos = partition(nums, left, right);
if (pos + 1 == k) {
return nums[pos];
} else if (pos + 1 > k) {
right = pos - 1;
} else {
left = pos + 1;
}
}
}
private int partition(int[] nums, int left, int right) {
int pivot = nums[left];
int l = left + 1;
int r = right;
while (l <= r) {
if (nums[l] < pivot && nums[r] > pivot) {
swap(nums, l++, r--);
}
if (nums[l] >= pivot) l++;
if (nums[r] <= pivot) r--;
}
swap(nums, left, r);
return r;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/geekplayers/Leetcode-301-600.git
git@gitee.com:geekplayers/Leetcode-301-600.git
geekplayers
Leetcode-301-600
Leetcode-301-600
master

搜索帮助