摘要:題目解題可以參考的這題比較簡單,就沒有用書里的解法,的思想就是交換,既然只能,那就一次至少搞定一個數(shù)啦解法解法只要是遇到或者,就需要采取行動
題目:
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library"s sort function for this problem.
click to show follow up.
Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0"s, 1"s, and 2"s, then overwrite array with total number of 0"s, then 1"s and followed by 2"s.
Could you come up with an one-pass algorithm using only constant space?
解題:
可以參考EPI的14.8, 這題比較簡單,就沒有用書里的解法,follow up的思想就是交換,既然只能one pass,那就一次至少搞定一個數(shù)啦
解法1:
public void Color(int[] nums, int color, int start, int len) { for (int i = start; i < start + len; i++) { nums[i] = color; } } public void sortColors(int[] nums) { if (nums == null || nums.length == 0) return; Mapmap = new HashMap (); for (int i = 0; i < nums.length; i++) { if (!map.containsKey(nums[i])) { map.put(nums[i], 1); } else { map.put(nums[i], map.get(nums[i]) + 1); } } int r = map.get(0) != null ? map.get(0) : 0; int w = map.get(1) != null ? map.get(1) : 0; int b = map.get(2) != null ? map.get(2) : 0; Color(nums, 0, 0, r); Color(nums, 1, r, w); Color(nums, 2, r + w, b); }
Follow up解法:
public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } public void sortColors(int[] nums) { if (nums == null || nums.length == 0) return; int r = 0, b = nums.length - 1; for (int i = 0; i < nums.length; i++) { //只要是遇到0或者2,就需要采取行動 while (nums[i] == 0 && i >= r || (nums[i] == 2 && i <= b)) { if (nums[i] == 0) { swap(nums, i, r++); } else { swap(nums, i, b--); } } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64840.html
摘要:題目鏈接這題是給數(shù)組排序,數(shù)組里面只有個變量。一個方法是用類似,個桶,統(tǒng)計三個變量出現(xiàn)的個數(shù),然后重構(gòu)數(shù)組即可。還有一種方法是用,參考算法這本書上的講解和程序 75. Sort Colors 題目鏈接:https://leetcode.com/problems... 這題是給數(shù)組排序,數(shù)組里面只有3個變量。一個方法是用類似bucket sort,3個桶,統(tǒng)計三個變量出現(xiàn)的個數(shù),然后重構(gòu)...
摘要:將數(shù)組中的數(shù)字排序,盡量實(shí)現(xiàn)時間復(fù)雜度。然后在第二次遍歷數(shù)組的過程中,將相應(yīng)次數(shù)的,,依序填入數(shù)組中。我們要確保左指針之前的數(shù)值全部是,右指針之后的數(shù)值全部是。這樣他就可以確保左右指針之間的數(shù)字為,從而實(shí)現(xiàn),,的排序。 題目要求 Given an array with n objects colored red, white or blue, sort them so that obj...
摘要:在,下,數(shù)據(jù)有添加成功,但返回值卻是轉(zhuǎn)換方法方法方法用于把數(shù)組中的所有元素放入一個字符串。元素是通過指定的分隔符進(jìn)行分隔的。而調(diào)用數(shù)組的方法后,其值的順序變成了。返回值如果從中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。 轉(zhuǎn)換方法 所有對象都具有toLocaleString()、toString()、valueOf()方法。其中調(diào)用數(shù)組的toString方法會返回以數(shù)組中的每個值的字...
摘要:例如,會刪除數(shù)組中的前兩項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等。這兩個方法都接收兩個參數(shù)要查找的項(xiàng)和可選的表示查找起點(diǎn)位置的索引。對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。 除Object類型外,Array是最常用的類型,Array對象與其他語言相比有著自己的不同之處,首先同一數(shù)組對象的不同項(xiàng)可以保存不同類型的數(shù)據(jù),其次數(shù)組對象的長短可以動態(tài)改變. showImg(...
摘要:每當(dāng)在末尾添加一項(xiàng)后,其都會自動更新以反應(yīng)這一變化。從而存在兩個以上不同版本的構(gòu)造函數(shù)。如果數(shù)組中的某一項(xiàng)值是或,那么該值在和方法返回的結(jié)果中以空字符串表示。對數(shù)組每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。 Array類型 ECMAscrip與其他多數(shù)語言中數(shù)組的共同點(diǎn):都是數(shù)據(jù)的有序列表 不同點(diǎn):數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù),數(shù)組的大小是可以動態(tài)調(diào)整的,及隨著數(shù)據(jù)...
閱讀 3609·2021-11-15 11:37
閱讀 2974·2021-11-12 10:36
閱讀 4403·2021-09-22 15:51
閱讀 2381·2021-08-27 16:18
閱讀 882·2019-08-30 15:44
閱讀 2164·2019-08-30 10:58
閱讀 1769·2019-08-29 17:18
閱讀 3269·2019-08-28 18:25