这是不久前我在滴滴出行时,面试官让我在纸上写出来的面试题。在一个升序排列的数组中, 查找绝对值最小的元素。分析, 数组升序排列, 两边的数值绝对值只会越来越大, 绝对值最小的元素必须在中间趋近于0的地方,因此思路就是不断的遍历数组, 找到趋近于0的这个位置。考虑四种情况:
- 数组全部为正数时, 绝对值最小的元素是第一位;
- 数组全部为负值时, 绝对值最小的元素为最后一位;
- 数组即包含正数, 也包含负数时, 需要找到趋近于0的位置, 找到两边的正数和负数, 比较这两个元素的大小;
- 数组为空或为一个元素时, 就是该元素或不存在。
这个题的思路并不难, 一般都会一开始就想到, 关键是面试时如何在纸上正确写出。我在网上搜索了下,发觉这是一道很老的面试题了,遗憾没有为找工作刷过题,当时没能在纸上写出来,但是思路是正确的,就卡在如何处理有正负数时的情况。我想到了用中点来快速遍历,但是一下子没多想,可能还是因为紧张,就没想到while
循环的数组下标处理方式,而是去设计每次判断中点偏离了解题思路。