库存管理 I

标签: 数组 二分查找

难度: Easy

仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。原库存表按商品 id 升序排列。现因突发情况需要进行商品紧急调拨,管理员将这批商品 id 提前依次整理至库存表最后。请你找到并返回库存表中编号的 最小的元素 以便及时记录本次调拨。

示例 1:

输入:stock = [4,5,8,3,4]
输出:3

示例 2:

输入:stock = [5,7,9,1,2]
输出:1

提示:

  • 1 <= stock.length <= 5000
  • -5000 <= stock[i] <= 5000

注意:本题与主站 154 题相同:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/

Submission

运行时间: 48 ms

内存: 13.5 MB

class Solution:
    def stockManagement(self, stock: List[int]) -> int:
        value=stock[0]
        idx=0
        for i in range(len(stock)):
            if stock[i]<value:
                value=stock[i]
                idx=i
        return value

            

Explain

题解的整体思路是通过一次遍历库存数组stock来找到最小的元素。首先,初始化value为数组的第一个元素,即stock[0],并设置一个索引变量idx来记录当前最小值的索引。随后,遍历整个数组,对于每一个元素stock[i],如果其值小于当前记录的最小值value,则更新value为这个更小的值,并更新idx为当前的索引i。最后,遍历完成后,value中存储的就是数组中的最小值,直接返回该值即可。

时间复杂度: O(n)

空间复杂度: O(1)

# 增加了注释的题解代码

class Solution:
    def stockManagement(self, stock: List[int]) -> int:
        value = stock[0]  # 初始化最小值为数组第一个元素
        idx = 0  # 最小值的初始索引
        for i in range(len(stock)):
            if stock[i] < value:
                value = stock[i]  # 发现更小的值,更新最小值
                idx = i  # 更新最小值的索引
        return value  # 返回找到的最小值

Explore

代码中没有显式地检查数组是否为空,直接访问了`stock[0]`。如果数组是空的,这将导致运行时错误。在实际应用中,应该先检查数组是否为空,如果为空,则应该返回一个错误消息或特定值,或抛出异常来处理这种边界情况。

在这段代码中,虽然记录了最小值的索引`idx`,但是最终没有使用这个索引进行进一步的操作,仅返回了最小值`value`。这表明`idx`的记录在当前函数逻辑中是多余的。除非未来有进一步处理这个索引的需求(例如,需要使用索引来做其他的逻辑处理),否则这个变量可以被省略,以简化代码。

如果数组中所有元素相同,这段代码仍然会遍历整个数组来确认所有元素都是最小值。这在效率上是可接受的,因为至少需要检查一次每个元素以确认它们相等。然而,因为已知数组中所有元素相同,实际上一次比较后就可以确定结果,所以可以说在这种特殊情况下没有更多的优化空间。每种算法都有其适用场景,对于这种场景,算法已经足够高效。