剛剛寫了bucket sort,就是利用下標來排序。而這裡的一些問題,是用下標來實現別的功能的,比如「標記」,標記某個元素是否出現過。
注意乙個區別,這類問題是:利用「下標」來記錄「元素值本身」,而不是利用「下標」來記錄「下標」(參考73.set matrix zeroes,我原來以為73屬於這一類其實不是)。
題目簡介
442. find all duplicates in an array
index-as-mark
index-as-mark
41. first missing positive
765. couples holding hands
442和448是使用下標標記,需要原陣列有乙個特性,比如「都大於零」,或者比如「都在-10~10範圍內」。這樣「標記」操作可以用「取負數」,或者「乘以11」來實現,被標記的元素可以完全和原來元素區別開來。
乙個陣列,每個元素1 ≤ a[i] ≤ n (n = size of array), 有些出現兩次,有些一次。求在 [1, n] 範圍內哪些數沒有再陣列**現。把每個數在「正數數列」中應該在的下標處的數翻轉(取負數),不關心那個位置上的數本身的值,只是借用哪個下標而已。然而也不是完全不關心啦,在翻轉之前先看看它是否已經被翻轉過,如果已經被翻轉過,則,bingo!找到乙個duplicate!input:[4,3,2,7,8,2,3,1],output:[2,3]
原陣列:[4,3,2,7,8,2,3,1]
正數數列:[1,2,3,4,5,6,7,8]
class
solution
nums[index]
=-nums[index]
;//翻轉
}return res;
}}
乙個陣列,每個元素1 ≤ a[i] ≤ n (n = size of array), 有些出現兩次,有些一次。求在 [1, n] 範圍內哪些數沒有再陣列**現。input:[4,3,2,7,8,2,3,1],output:[5,6]
class
solution
}for
(int i =
0; i < nums.length;
++i)
}return result;
}}
input: [3,4,-1,1] output: 2。找到第乙個缺失的正數。舉個?:
nums = [3,4,-1,1] -->現有的陣列
nums = [1,2,3,4] -->連續正數陣列
為什麼這個過程可以保證不漏掉任何一位呢?因為我們的i是一位一位往後捋的,一定要保證當前位置的值或者1)是負數,或者2)在正確的位置上,否者不會i++的。
class
solution
}//check first missing num
for(
int i =
0; i < len; i++)}
return len +1;
}}
input: row = [0, 2, 1, 3],output: 1本來我覺得41.first missing positive和前面442,448類似,都是用下標來標記,或者找與當前值val相對應的下標nums[val-1]的那個元素進行交換。總之我感覺差不多。explanation: we only need to swap the second (row[1]) and third (row[2]) person. 我們認為(0,1),(2,3),…是couple,求最少的swap使得每對couple都挨著。
用C 實現 數列下標
牛客網演算法周周練15 題號a 題目描述 給出乙個數列 a,求出乙個數列b.其中bi 表示 數列a中 ai 右邊第乙個比 ai 大的數的下標 從1開始計數 沒有找到這乙個下標 bi 就為0,輸出數列b 輸入描述 第一行1個數字 n n 10000 第二行n個數字第 i 個數字為 ai 0 ai 10...
(37) 用標記介面定義型別
所謂標記介面,就是指乙個介面裡面什麼都沒有,只是標記實現類具有某種屬性。例如serilizeable就是這樣乙個介面,他只是告訴jvm,繼承於這個介面的class需要序列化處理,而我們根本不用實現這個介面的方法。優點 1.標記介面定義的型別是由被標記類的例項實現的 標記註解則沒有定義這樣的型別。2....
angular 學用標記 筆記
npm install g angular cli ng serve open ng serve命令會構建本應用 啟動開發伺服器 監聽原始檔,並且當那些檔案發生變化時重新構建本應用。open標誌會開啟瀏覽器 ng update 你還可以使用 cli 命令ng update發現 angular 的最新...