判断数组中是否有重复元素 - Tristan's blog



判断数组中是否有重复元素 - Tristan's blog

问题描述
n个元素的数组,里面的数都是0~n-1范围内的整数,求数组中任意的一个重复元素,没有重复元素返回-1。
要求
时间复杂度为O(n),空间复杂度为O(1)
分析
题目数据范围较小(与元素个数相当),容易想到用bitmap或者简单的HASH来处理。但是题目要求空间复杂度为O(1),所以在做HASH时不能在原数组中简单的用数字来代表元素是否出现或者未出现,因为一旦用特定数字(比如1)来代表该位置i所对应的元素i出现过,那么数组中的第i个元素将会被覆盖,从而导致信息丢失(数组中第i个元素再也无法找回)。这里我们用一个方法来维持相关信息:由于元素的值都是0-n-1范围内的数字,所以当响应元素i出现时,我们可以把arr[i](arr是指输入的数组)内的元素值改为arr[i]-n,这样当再去取arr[i]的值时,只需要用arr[i]+n即为初始的arr[i]值。当出现了元素i,并且arr[i]的值小于0时(也就是说之前已经出现了i),则i就是一个重复元素。

Read full article from 判断数组中是否有重复元素 - Tristan's blog


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