我在面试中被问到以下问题。采访Q:给定一个大小未知的输入数组,开始时全为1,最后为0。找到从0开始的数组中的索引
给定一个大小未知的输入数组,其中所有1都在开头,0到最后。从0开始的位置找到数组中的索引。考虑在数组中有数以百万计的1和0。数组非常大..数组内容1111111 ....... 1100000 ......... 0000000.On后来用google搜索这个问题,我发现关于http://www.careercup.com/question?id=2441的问题。
这个问题最令人费解的是如果我不知道数组的大小,我怎么知道*(array_name + index)属于数组?即使有人发现索引的值从1变为0,如何声明索引属于数组。
我可以找到的最佳答案是O(logn)解决方案,其中一个人保持倍增索引,直到找到0.再次保证特定元素属于数组。编辑: 这是一个基于c的数组。约束是你没有end elem的索引(不能使用sizeof(arr)/ sizeof(arr [0]))。如果我说1024.arr [1024] == 1会怎么样。由于数组长度为1029(程序员未知),所以arr [2048]不受约束。那么在找到解决方案时使用arr [2048]可以吗?它是无界的,它的价值可以是任何东西。所以我想知道,也许这个问题是有缺陷的。
你知道1和0的比例吗?例如,如果您知道0的数量至少与1的数量相同,则重复两次将使您到达那里。或者,你可以假设你正在使用一种具有数组越界异常的语言吗? – pjs
考虑在数组中有数以百万计的1和0 .i.e数组非常大..例如,数组内容1111111 ....... 1100000 ......... 0000000。假设一个基于c的数组。 – claudius
这可能会发生,arr [2048]也是一个几乎“搞砸”算法的1。在这种情况下,您需要O(n)算法或更多关于数组的信息。 –