{"id":575,"date":"2005-02-28T19:05:00","date_gmt":"2005-03-01T02:05:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=575"},"modified":"2005-02-28T19:05:00","modified_gmt":"2005-03-01T02:05:00","slug":"echando-codigo-%c2%bfcomo-encontrar-si-hay-elementos-duplicados-en-una-lista-grande-de-numeros","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2005\/02\/28\/echando-codigo-%c2%bfcomo-encontrar-si-hay-elementos-duplicados-en-una-lista-grande-de-numeros\/","title":{"rendered":"Echando c\u00f3digo: \u00bfComo encontrar si hay elementos duplicados en una lista grande de n\u00fameros?"},"content":{"rendered":"<p>Bueno, suponga que le dan el siguiente problema:<\/p>\n<p>Tiene una lista desordenada de n\u00fameros de tama\u00f1o N; Cada elemento puede estar entre 0 y N. Le preguntan cual es la forma m\u00e1s r\u00e1pida de saber si dicha lista tiene elementos duplicados, utilizando la menor cantidad de memoria posible y en un tiempo constante.<\/p>\n<p>\u00bfComo lo resolver\u00eda usted?<\/p>\n<p>Usted podr\u00eda comenzar resolviendo este problema contando cuantas ocurrencias de cada n\u00famero aparecen en la lista. Para ello podr\u00eda guardarlas en un arreglo asociativo (HashMap) el cual tiene tiempo de accesso constante. Pero el problema es que si usted tiene muchisimos n\u00fameros repetidos, entonces va a gastar memoria que jode&#8230;<\/p>\n<p>Bueno, si alguna vez usted vi\u00f3 corrimiento de bits ala izquierda y mascaras de bits (en la ULA yo lo aprend\u00ed a hacer en una materia que se llama sistemas l\u00f3gicos :)) entonces vera que el algoritmo se puede simplificar bastante simplemente dandole una mascara distinta a cada n\u00famero, guardandolos a todos en una variable entera. Si recuerda bien, cada vez que corremos un bit a la izquierda es como si estuvieramos elevando a la n dicho n\u00famero, donde n es la cantidad de bits que corremos a la izquierda.<\/p>\n<p>\u00bfFumado? <span style=\"font-style: italic;\">Si, pero el concepto es muy arrecho<\/span> \ud83d\ude00<\/p>\n<p><span style=\"font-style: italic;\">OK, no siga leyendo, pienselo un rato y vaya al frente de su computadora.<\/span><\/p>\n<p>\u00bfYa termin\u00f3?, Veamos entonces el c\u00f3digo en Java:<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">You<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">given<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">list<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">numbers<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">from<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">N<\/span><span class=\"syntax3\">;<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Each<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">element<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">on<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">array<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">has<\/span><br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">goes<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">from<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">N<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Find<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">array<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">has<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">any<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">duplicates<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">on<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">it<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Well<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">problem<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">I<\/span><span class=\"syntax3\">'<\/span><span class=\"syntax3\">m<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">going<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">assume<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CPU<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">power<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">not<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">an<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">issue<\/span><br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">but<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">storage<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">space<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Also<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">try<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">keep<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">access<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">list<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">minimun<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><br \/><span class=\"gutter\">   7:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jose<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">V<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Nunez<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Zuleta<\/span><br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">02<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">28<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2005<\/span><br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">License<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GPL<\/span><br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Blog<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">El<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Angel<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Negro<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">http<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">elangelnegro<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">blogspot<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">com<\/span><br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  12:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> ArrayDuplicate <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  13:<\/span>    <br \/><span class=\"gutter\">  14:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutterH\">  15:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">So<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">idea<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">count<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">how<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">many<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">ocurrences<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">appears<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">  16:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">We<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">have<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">scan<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">whole<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">list<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">in<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">order<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">find<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">duplicates<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">so<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">worst<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">case<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">log<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">n<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">We<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">use<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">fact<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">each<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">can<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">be<\/span><br \/><span class=\"gutter\">  18:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">stored<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">as<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">mask<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">bits<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">and<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">based<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">on<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">position<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">from<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">N<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">we<\/span><span class=\"syntax3\"> <\/span><br \/><span class=\"gutter\">  19:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">can<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">have<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">each<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">as<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">f<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">n<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\">=<\/span><span class=\"syntax3\">2<\/span><span class=\"syntax3\">^<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">n<\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">We<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">only<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">interested<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">see<\/span><span class=\"syntax3\"> <\/span><br \/><span class=\"gutterH\">  20:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">there<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">duplicate<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">so<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">we<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">don<\/span><span class=\"syntax3\">'<\/span><span class=\"syntax3\">t<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">really<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">care<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">about<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">real<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><br \/><span class=\"gutter\">  21:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">duplicates<\/span><span class=\"syntax3\">.<\/span><br \/><span class=\"gutter\">  22:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><br \/><span class=\"gutter\">  23:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">List<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">unsorted<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">numbers<\/span><br \/><span class=\"gutter\">  24:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Exception<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">numbers<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">invalid<\/span><br \/><span class=\"gutterH\">  25:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@since<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><br \/><span class=\"gutter\">  26:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutter\">  27:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">main<\/span>(String [] args) <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  28:<\/span>                <span class=\"syntax8\">if<\/span> (args <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  29:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span><br \/><span class=\"gutterH\">  30:<\/span>                                <span class=\"syntax6\">IllegalArgumentException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Provide<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">some<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">numbers<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\">  31:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  32:<\/span>            <br \/><span class=\"gutter\">  33:<\/span>                <span class=\"syntax8\">if<\/span> (args.length <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  34:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span><br \/><span class=\"gutterH\">  35:<\/span>                                <span class=\"syntax6\">IllegalArgumentException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Provide<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">some<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">numbers<\/span><span class=\"syntax13\">\"<\/span>);<br \/><span class=\"gutter\">  36:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  37:<\/span>                <span class=\"syntax10\">int<\/span> len <span class=\"syntax18\">=<\/span> args.length;<br \/><span class=\"gutter\">  38:<\/span>            <br \/><span class=\"gutter\">  39:<\/span>                <span class=\"syntax10\">int<\/span> num <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;<br \/><span class=\"gutterH\">  40:<\/span>                <span class=\"syntax10\">int<\/span> checksum <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;<br \/><span class=\"gutter\">  41:<\/span>                <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> i <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; i <span class=\"syntax18\">&lt;<\/span> len; i<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  42:<\/span>                        num <span class=\"syntax18\">=<\/span> Integer.<span class=\"syntax6\">parseInt<\/span>(args[i]);<br \/><span class=\"gutter\">  43:<\/span>                        <span class=\"syntax10\">int<\/span> mask <span class=\"syntax18\">=<\/span> <span class=\"syntax6\">numMask<\/span>(num);<br \/><span class=\"gutter\">  44:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">This<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">number<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">is<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">not<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">on<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">list,<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">so<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">add<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">it!<\/span><br \/><span class=\"gutterH\">  45:<\/span>                        <span class=\"syntax8\">if<\/span> ( (checksum <span class=\"syntax18\">&<\/span> mask) <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span> ) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  46:<\/span>                                checksum <span class=\"syntax18\">|<\/span><span class=\"syntax18\">=<\/span> mask;<br \/><span class=\"gutter\">  47:<\/span>                        <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">else<\/span> <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  48:<\/span>                                System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Found<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">first<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">duplicate:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span><br \/><span class=\"gutter\">  49:<\/span>                                        <span class=\"syntax18\">+<\/span> num);<br \/><span class=\"gutterH\">  50:<\/span>                                        <span class=\"syntax8\">break<\/span>;<br \/><span class=\"gutter\">  51:<\/span>                        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  52:<\/span>                <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  53:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  54:<\/span>    <br \/><span class=\"gutterH\">  55:<\/span>        <span class=\"syntax3\">\/**<\/span><br \/><span class=\"gutter\">  56:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">f<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">n<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\">=<\/span><span class=\"syntax3\">2<\/span><span class=\"syntax3\">^<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">n<\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\">)<\/span><br \/><span class=\"gutter\">  57:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><br \/><span class=\"gutter\">  58:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">int<\/span><br \/><span class=\"gutter\">  59:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><br \/><span class=\"gutterH\">  60:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">int<\/span> <span class=\"syntax6\">numMask<\/span>(<span class=\"syntax10\">int<\/span> number) <span class=\"syntax18\">{<\/span><br \/><span class=\"gutter\">  61:<\/span>                <span class=\"syntax8\">return<\/span> <span class=\"syntax5\">1<\/span> <span class=\"syntax18\">&lt;<\/span><span class=\"syntax18\">&lt;<\/span> number;<br \/><span class=\"gutter\">  62:<\/span>        <span class=\"syntax18\">}<\/span><br \/><span class=\"gutter\">  63:<\/span>    <br \/><span class=\"gutter\">  64:<\/span><span class=\"syntax18\">}<\/span><br \/><\/pre>\n<p>Una corrida de ejemplo:<\/p>\n<blockquote><p>[josevnz@localhost Arrays]$ javac ArrayDuplicate.java -d .<br \/>[josevnz@localhost Arrays]$ java ArrayDuplicate 2 3 5 <span style=\"color: rgb(0, 153, 0);\">8<\/span> 7 <span style=\"color: rgb(0, 153, 0);\">8<\/span> 90<br \/>Found first duplicate: 8<br \/>[josevnz@localhost Arrays]$ java ArrayDuplicate <span style=\"color: rgb(0, 102, 0);\">2<\/span> 3 5 100 7 8 90 <span style=\"color: rgb(0, 102, 0);\">2<\/span><br \/>Found first duplicate: 2<br \/>[josevnz@localhost Arrays]$ java ArrayDuplicate 2 3 5 100 7 8 90 0<br \/>[josevnz@localhost Arrays]$<\/p><\/blockquote>\n<p>Puede bajarse el c\u00f3digo desde <a href=\"http:\/\/prdownloads.sourceforge.net\/elangelnegro\/ArrayDuplicate.java?download\">ac\u00e1<\/a>.<\/p>\n<p>\u00bfSe le ocurre otra idea de como ver si hay duplicados?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bueno, suponga que le dan el siguiente problema: Tiene una lista desordenada de n\u00fameros de tama\u00f1o N; Cada elemento puede estar entre 0 y N. Le preguntan cual es la forma m\u00e1s r\u00e1pida de saber si dicha lista tiene elementos duplicados, utilizando la menor cantidad de memoria posible y en un tiempo constante. \u00bfComo lo <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2005\/02\/28\/echando-codigo-%c2%bfcomo-encontrar-si-hay-elementos-duplicados-en-una-lista-grande-de-numeros\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/575"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=575"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/575\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=575"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}