摘要:注意,若正數(shù)多于負(fù)數(shù),則序列以正數(shù)開始,正數(shù)結(jié)束。所以先統(tǒng)計正數(shù)個數(shù),若超過序列長度的一半,則正指針從開始,反之則負(fù)指針從開始。注意交換函數(shù)的形式,必須是交換指針?biāo)笖?shù)字的值,而非坐標(biāo)。
Problem
Given an array with positive and negative integers. Re-range it to interleaving with positive and negative integers.
NoticeYou are not necessary to keep the original order of positive integers or negative integers.
ExampleGiven [-1, -2, -3, 4, 5, 6], after re-range, it will be [-1, 5, -2, 4, -3, 6] or any other reasonable answer.
ChallengeDo it in-place and without extra memory.
Note典型雙指針題目,兩個指針分別指向交叉的正數(shù)和負(fù)數(shù)。
注意,若正數(shù)多于負(fù)數(shù),則序列以正數(shù)開始,正數(shù)結(jié)束。所以先統(tǒng)計正數(shù)個數(shù),若超過序列長度的一半,則正指針從0開始,反之則負(fù)指針從0開始。指針每次跳兩位,若指向的數(shù)字符號不符,則停止,交換兩指針指向的數(shù)。
注意交換函數(shù)swap()的形式,必須是交換指針?biāo)笖?shù)字的值,而非坐標(biāo)。所以下面這樣的寫法是不對的:swap(A[posIndex], A[negIndex]),因為它調(diào)用的是swap(integerA, integerB),在交換值的同時也交換了坐標(biāo)。
class Solution { public void rerange(int[] A) { int posNum = 0, posIndex = 1, negIndex = 0; for (int a : A) { posNum += a > 0 ? 1 : 0; } if (posNum * 2 > A.length) { posIndex = 0; negIndex = 1; } while (posIndex < A.length && negIndex < A.length) { while (posIndex < A.length && A[posIndex] > 0) posIndex += 2; while (negIndex < A.length && A[negIndex] < 0) negIndex += 2; if (posIndex < A.length && negIndex < A.length) { swap(A, posIndex, negIndex); posIndex += 2; negIndex += 2; } } } public void swap(int[] A, int i, int j) { int temp = A[i]; A[i] = A[j]; A[j] = temp; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65718.html
摘要:找第一個缺失的正整數(shù),只要先按順序排列好,也就是,找到第一個和不對應(yīng)的數(shù)就可以了。注意數(shù)組的從開始,而正整數(shù)從開始,所以重寫排列的時候要注意換成,而就是從開始的數(shù)組中的元素。 Problem Given an unsorted integer array, find the first missing positive integer. Example Given [1,2,0] re...
Problem Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2. Notice The length of both num1 and num2 is < 5100.Both num1 and num2 contains only digits ...
摘要:單次選擇最大體積動規(guī)經(jīng)典題目,用數(shù)組表示書包空間為的時候能裝的物品最大容量。注意的空間要給,因為我們要求的是第個值,否則會拋出。依然是以背包空間為限制條件,所不同的是取的是價值較大值,而非體積較大值。 Backpack I Problem 單次選擇+最大體積 Given n items with size Ai, an integer m denotes the size of a b...
摘要:做一個窗口,滿足的左界到右界的距離最小值為所求。循環(huán)的約束條件要注意,不要遺漏不能超過的長度,但可以等于,因為存在所有元素之和為的極端情況。在時,先更新窗口為當(dāng)前循環(huán)后的最小值,減去最左元素,指針后移。 Problem Given an array of n positive integers and a positive integer s, find the minimal len...
摘要:和唯一的不同是組合中不能存在重復(fù)的元素,因此,在遞歸時將初始位即可。 Combination Sum I Problem Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T...
閱讀 2722·2021-11-11 17:21
閱讀 613·2021-09-23 11:22
閱讀 3578·2019-08-30 15:55
閱讀 1641·2019-08-29 17:15
閱讀 573·2019-08-29 16:38
閱讀 904·2019-08-26 11:54
閱讀 2504·2019-08-26 11:53
閱讀 2750·2019-08-26 10:31