这是第31篇算法,力扣链接
仓库管理员以数组
stock
形式记录商品库存表。stock[i]
表示商品id
,可能存在重复。原库存表按商品id
升序排列。现因突发情况需要进行商品紧急调拨,管理员将这批商品id
提前依次整理至库存表最后。请你找到并返回库存表中编号的 最小的元素 以便及时记录本次调拨。示例 1:
输入:stock = [4,5,8,3,4] 输出:3
如题,应该是数组找最小值,这种暴力方法应该很容易解决问题:
class Solution {
public int minArray(int[] numbers) {
int res = 9999;
for (int temp : numbers) {
if (res > temp) {
res = temp;
}
}
return res;
}
}
当然,肯定给大家展示的肯定不能是暴力法,这种方法没什么直接学习价值,可以尝试一下二分查找,但是这时候会有疑问了,二分查找找的不是有序数组吗。仔细看题,其实这个也是有序数组,不过是将原数组拆分后接到尾部了,每一段都是递增的,这就和上一次的算法题同理了30.寻找旋转排序数组中的最小值 II
func stockManagement(stock []int) int {
left, right := 0, len(stock)-1
for left < right {
mid := (left + right) / 2
if stock[mid] < stock[right] {
right = mid
} else if stock[mid] > stock[right] {
left = mid + 1
} else {
right--
}
}
return stock[left]
}