本文共 1349 字,大约阅读时间需要 4 分钟。
在编程中,寻找数组中的最小值是一个常见的问题。以下是两种常用的解决方案,分别针对不同的场景进行优化。
思想
该算法的基本思路是从数组末尾开始逆向遍历,依次比较当前元素与其前一个元素的值。如果发现前一个元素大于当前元素,则当前元素即为最小值。如果遍历过程中没有找到更小的元素,则第一个元素即为最小值。代码实现
public class Solution { public: int minArray(vector &numbers) { for (int i = numbers.size()-1; i > 0; --i) { if (numbers[i-1] > numbers[i]) { return numbers[i]; } } return numbers[0]; }}
思想
利用二分查找的原理,通过不断缩小查找范围来确定最小值的位置。具体逻辑如下:nums[mid]
等于 nums[right]
,则最小值的位置可能在 mid
左侧,同时由于 nums[right]
和 nums[mid]
的值相同,这种情况下继续缩小右边的范围,即 right -= 1
。nums[mid] > nums[right]
,则最小值的位置位于 mid
右侧,即 left = mid + 1
。nums[mid] < nums[right]
,则最小值的位置位于 mid
左侧,即 right = mid
。代码实现
public class Solution { public: int minArray(vector &numbers) { int left = 0, right = numbers.size() - 1, mid; while (left < right) { mid = (left + right) / 2; if (numbers[mid] == numbers[right]) { --right; } else if (numbers[mid] > numbers[right]) { left = mid + 1; } else { right = mid; } } return numbers[left]; }}
选择哪种方法取决于具体的应用场景。
转载地址:http://orzmz.baihongyu.com/