這類問題和方法很常見。主要是思路要開闊,講已知的問題抽象成數學模型或函數表達式,這正是數學建模的真理,problem solving(解決實際問題的能力)。
法1:利用計數排序,用數組記下每一個ID出現的次數,然后找出出現1次的那個ID,時空復雜度都是O(N)。現在如果數據量很大,那末這樣的空間復雜度是沒法被容忍的
法2:利用兩個相同的數異或結果為0,將所有的ID都異或1遍,明顯最后剩下的值,即為出現次數為1次的那個數。
法3:如果存在兩個數據出現1次的情況,還是利用異或,只是得將這兩個出現1次的數據分開為兩堆,再利用法2。
只是如何分這很關鍵,其實還可以利用異或,畢竟全部異或就相當于這兩個數據異或,那末肯定有1個位為1,利用該位是不是為1,將所有數據分成兩堆。
這就類似于數學中分類討論的思想。