文章目录
前言
接着上次的周赛第三题开始,再加上昨天的每日一题吧
一、Problem C 2064. 分配给商店的最多商品的最小值
这个题目是我最讨厌的BFS ps:因为我不太会.不过通过理解这道题我对BFS又有了一个新的见解?
通过队列存储每次操作后的值,用操作过的值与最后要的值比较如果相等就返回res操作次数.(一开始被队列的size会变给
坑了)太菜了太菜了
代码如下
class Solution {
public int minimumOperations(int[] nums, int start, int goal) {
Deque<Integer> queue = new LinkedList<>();
Set<Integer> set = new HashSet<>();
set.add(start);
queue.offer(start);
int res = 1;
while (!queue.isEmpty()){
int size = queue.size();
for (int i = 0; i < size; i++) {
int x = queue.poll();
for (int j = 0; j < nums.length; j++) {
int add = x + nums[j];
int remove = x - nums[j];
int xor = x ^ nums[j];
if (add == goal|| remove == goal || xor == goal) return res;
if (add>=0 && add<=1000 && set.add(add)) queue.offer(add);
if (remove>=0 && remove<=1000 && set.add(remove)) queue.offer(remove);
if (xor>=0 && xor<=1000 && set.add(xor)) queue.offer(xor);
}
}
res++;
}
return -1;
}
}
二、11.9每日一题2064. 分配给商店的最多商品的最小值
一开始没想到是一个二分.后来想到了就挺简单hh
代码如下:
class Solution {
public int minimizedMaximum(int n, int[] quantities) {
int mid,left = 1,right = 100000;
while (left<right){
mid = left+right>>1;
int count = 0;
for (int quantity : quantities) {
if (quantity%mid==0){
count+=quantity/mid;
}else {
count+=quantity/mid +1;
}
}
if (count<=n){
right = mid;
}else {
left = mid+1;
}
}
return left;
}
}
总结
还是太菜了好好学吧