题目:
有一个存有1-100的升序的数组。也就是存有1,2,3,4……100这100个数字的数组。如果从中删除一个数字,那么该数字后面的所有数字依次前移。现在已经删除了一个数字,问如何找出删除的是哪个数字。
介绍:
这是本人视屏面试的一道逻辑题,当时可能由于紧张也可能是因为视屏面试听不太清楚,题目的理解出现了错误,我当时的理解是存储比如1,3,5,6这样的不连续的数字。所以花了比较长的时间想了一些其他的办法,但是不允许其他的辅助,所以行不通。所以之后问清楚是1,2,3这样的,那么就简单多了。
思路1:
由于数组存储的是1,2,3,4这样的有规律的数组,所以这些数组中的元素和下标之间有着紧密的联系。所以没有移位的元素与下标之间相差1,移位了的差2.所以从头向后一次查找,找到第一个元素和下标相差2的位置,该下标加1就是被删除的数。
思路2:
因为只要有一个数被移动了,那么该位置上的数就会比之前的数字大1,所以把所有的元素的值相加,然后用5050减去该和就知道哪个数字被删除了。但是该方法不适合在编程方面使用。因为首先该方法从算法的角度虽然好理解,但是算法不优,而且得考虑最后一个数字的处理。