0%

LCR128

问题描述

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

示例 1:

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

示例 2:

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

提示:

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

解答

直接遍历就是简单题,二分就是hard

前一个升序数组,后一个升序数组,找到第两个数组的开头就是最小值(可能只有一个数组),那就用尾巴和中间比,如果尾巴小于尾巴,那就往把中间往后二分,反之往前,如果相等,尾巴左移一位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int inventoryManagement(int[] stock) {
int left=0,right=stock.length-1;
int mid = left+(right-left)/2;
while(left<right){
mid = left+(right-left)/2;
if(stock[right]<stock[mid]){
left=mid+1;
}
else if(stock[right]>stock[mid]){
right=mid;
}
else if(stock[mid]==stock[right]){
right--;
}
}
return stock[left];
}
}