0207算法:寻找目标值、库存管理
力扣LCR121:寻找目标值
m
*n
的二维数组plants
记录了园林景观的植物排布情况,具有以下特性:
- 每行中,每棵植物的右侧相邻植物不矮于该植物;
- 每列中,每棵植物的下侧相邻植物不矮于该植物。
- 请判断
plants
中是否存在目标高度值target
class Solution {
public boolean findTargetIn2DPlants(int[][] plants, int target) {
//左上最小,右下最大
//从最下入手,如果比target小,就向右移动一列,y+1
// 如果比target大,就像上移动一行,x--,知道等于target或者到达右上角
if(plants.length==0 || plants[0].length==0){
return false;
}
int x = plants.length-1;
int y = 0;
while(x>=0 && y<plants[0].length){
//如果没到右上角
if(plants[x][y]==target){
return true;
}else if(plants[x][y]>target){
x--;
}else{
y++;
}
}
return false;
}
}
LCR 128 库存管理
仓库管理员以数组
stock
形式记录商品库存表。stock[i]
表示商品id
,可能存在重复。原库存表按商品id
升序排列。现因突发情况需要进行商品紧急调拨,管理员将这批商品id
提前依次整理至库存表最后。请你找到并返回库存表中编号的 最小的元素 以便及时记录本次调拨
class Solution {
public int inventoryManagement(int[] stock) {
//二分查找法
//不断割分右边的部分
int l = 0;
int r = stock.length-1;
int mid=0;
while(l<r){
mid = l+(r-l)/2;
if(stock[mid]>stock[r]){
l=mid+1;
}else if(stock[mid]<stock[r]){
r=mid;
}else{
r--;
}
}
return stock[l];
}
}