数组中只出现一次的数字 | 指尖的舞客



数组中只出现一次的数字 | 指尖的舞客

题:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求找出这两个数字。

解:这是另一个问题(A0)的升级版(A),即在一个数组中只有一个数字出现了1遍,其他数字出现了两遍,要求找出这个数字。这个问题是原数组中有两个只出现了一次的数,求解起来自然费事一点。

思路:先看看A0问题,初一看,这题简单,直接弄个hash表来计算,在O(n)的时间和空间复杂度即可求出。可是这种空间复杂度是不必要的,因为有更好的办法。从另一个层面上讲,你只需要找出这个数字而已,所以使用位运算的方法更佳,原理就是通过异或运算符来操作:相同的位异或为0,反之为0,由于其他数字都出现了偶数次,所以一遍异或过后其他的数字都抵消了,最后的值就是数组中只出现一次的数字。如此看来A0问题还是比较简单的,A与A0两个貌似差不多的问题,是否具有类似方法求解呢?

其实我们可以把A1问题转化为为A0,只要我们能把数组划分为两部分,每个部分包含一个只出现一次的数字而其他数字均出现两次,这样我们就能利用A0的解法来求解A了。现在问题来了,如何转化呢?

1.将数组所有元素做异或运算,最后的结果一定等于只出现一次的两个数字的异或结果M。

2.根据M中某一位为1的位索引index,将数组的元素在index位是否为1分为两组,这样两个只出现一次的数字必然会分别落在两部分,且其他数字均出现两次,至此转化完成。


Read full article from 数组中只出现一次的数字 | 指尖的舞客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts