
前言
查找最大值
有一个整型数组,数组元素不重复,数组元素先升序后降序,
例如:1,3,5,7,9,8,6,4,2,请写一个函数找出数组最大的元素。

解题思路
咋一看本题,大家都会觉得很简单。很容易想到如下两种思路:
思路一:对数组按照从大到小或从小到大进行排序,那么第一个元素或最后一个元素就是最大的元素。
思路二:遍历整个数组,设置最大元素为第一个元素,边遍历边比较,同时更新最大元素。
尽管上述两种方法都可以,前者如果用快排的时间复杂度为O(nlgn),后者时间复杂度为O(n),其中 n 是数组的长度,但这样做,面试官可能就会让你回去等答复。
二分查找
本题可以采用二分法去做。原因:数组一端升序另一端降序。只要找到升序一端的最后一个元素即可。
示例

由于数组是先升后降,所以第一个元素或最后一个元素不可能是最大元素,查找区间可设定为[1, numsSize - 2]。

比较中间元素与其下一个元素大小关系,缩小目标值的查找区间。


获取升序的一端的最后一个元素(目标值)。

注意
Show me the Code
C
int getLargestNumInArray(int *nums, int numsSize) {
if (nums == NULL || numsSize <= 0) {
return -1;
}
int left = 1, right = numsSize - 2;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return nums[left];
}
复杂度分析
往期精彩回顾
更多精彩

点“赞”和“在看”哦
文章转载自阿飞算法,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




