广联达的笔试题:
简化后:一列(编号)整数数组,两两相同,现有不同的编号A和B与他们也都不相同,混入其中,求A和B的编号是多少,要求:时间复杂度为o(n);空间复杂度o(1);
求思路????
折半,如果中间的数字串位了一位,表明从开头到这位,有一个是不同的;如过串了两位,表明两个数都在开头到这位之间;如果一个都没有串位,就表明在后半部分。类似折半查找,具体实现自己弄吧!
1、是两两不相同吧?
2、编号还有什么特征?
3、A、B又有什么特征?
真的我看了很糊涂。能否把原题完整的贴出来?
这个题中的两两相同应该是迷惑人的,其实就是让你找出A、B的编号。算法的要求是时间复杂度O(n),空间复杂度是O(1),这个问题主要考你对时间复杂度、空间复杂度的理解。
就一个for循环就行了。
建立一個 隊列長度1/2的hash表
for遍歷過程中 看hash表中是否有相應的數據,沒有則push進hash表,有則pop出來
最後hash表中剩下的應該就是了吧