class051 二分答案法与相关题目【算法】

class051 二分答案法与相关题目【算法】

算法讲解051【必备】二分答案法与相关题目
在这里插入图片描述

code1 875. 爱吃香蕉的珂珂

// 爱吃香蕉的珂珂
// 珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉
// 警卫已经离开了,将在 h 小时后回来。
// 珂珂可以决定她吃香蕉的速度 k (单位:根/小时)
// 每个小时,她将会选择一堆香蕉,从中吃掉 k 根
// 如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉
// 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
// 返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)
// 测试链接 : https://leetcode.cn/problems/koko-eating-bananas/

package class051;// 爱吃香蕉的珂珂
// 珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉
// 警卫已经离开了,将在 h 小时后回来。
// 珂珂可以决定她吃香蕉的速度 k (单位:根/小时)
// 每个小时,她将会选择一堆香蕉,从中吃掉 k 根
// 如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉
// 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
// 返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)
// 测试链接 : https://leetcode.cn/problems/koko-eating-bananas/
public class Code01_KokoEatingBananas {// 时间复杂度O(n * log(max)),额外空间复杂度O(1)public static int minEatingSpeed(int[] piles, int h) {// 最小且达标的速度,范围[l,r]int l = 1;int r = 0;for (int pile : piles) {r = Math.max(r, pile);}// [l,r]不停二分int ans = 0;int m = 0;while (l <= r) {// m = (l + r) / 2m = l + ((r - l) >> 1);if (f(piles, m) <= h) {// 达标!// 记录答案,去左侧二分ans = m;// l....m....r// l..m-1r = m - 1;} else {// 不达标l = m + 1;}}return ans;}// 香蕉重量都在piles// 速度就定成speed// 返回吃完所有的香蕉,耗费的小时数量public static long f(int[] piles, int speed) {long ans = 0;for (int pile : piles) {// (a/b)结果向上取整,如果a和b都是非负数,可以写成(a+b-1)/b// "讲解032-位图"讲了这种写法,不会的同学可以去看看// 这里不再赘述ans += (pile + speed - 1) / speed;}return ans;}}

code2 410. 分割数组的最大值

// 分割数组的最大值(画匠问题)
// 给定一个非负整数数组 nums 和一个整数 m
// 你需要将这个数组分成 m 个非空的连续子数组。
// 设计一个算法使得这 m 个子数组各自和的最大值最小。
// 测试链接 : https://leetcode.cn/problems/split-array-largest-sum/

package class051;// 分割数组的最大值(画匠问题)
// 给定一个非负整数数组 nums 和一个整数 m
// 你需要将这个数组分成 m 个非空的连续子数组。
// 设计一个算法使得这 m 个子数组各自和的最大值最小。
// 测试链接 : https://leetcode.cn/problems/split-array-largest-sum/
public class Code02_SplitArrayLargestSum {// 时间复杂度O(n * log(sum)),额外空间复杂度O(1)public static int splitArray(int[] nums, int k) {long sum = 0;for (int num : nums) {sum += num;}long ans = 0;// [0,sum]二分for (long l = 0, r = sum, m, need; l <= r;) {// 中点mm = l + ((r - l) >> 1);// 必须让数组每一部分的累加和 <= m,请问划分成几个部分才够!need = f(nums, m);if (need <= k) {// 达标ans = m;r = m - 1;} else {l = m + 1;}}return (int) ans;}// 必须让数组arr每一部分的累加和 <= limit,请问划分成几个部分才够!// 返回需要的部分数量public static int f(int[] arr, long limit) {int parts = 1;int sum = 0;for (int num : arr) {if (num > limit) {return Integer.MAX_VALUE;}if (sum + num > limit) {parts++;sum = num;} else {sum += num;}}return parts;}}

code3 机器人跳跃问题

// 机器人跳跃问题
// 机器人正在玩一个古老的基于DOS的游戏
// 游戏中有N+1座建筑,从0到N编号,从左到右排列
// 编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位
// 起初机器人在编号为0的建筑处
// 每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E
// 下一步它将跳到第个k+1建筑
// 它将会得到或者失去正比于与H(k+1)与E之差的能量
// 如果 H(k+1) > E 那么机器人就失去H(k+1)-E的能量值,否则它将得到E-H(k+1)的能量值
// 游戏目标是到达第个N建筑,在这个过程中,能量值不能为负数个单位
// 现在的问题是机器人以多少能量值开始游戏,才可以保证成功完成游戏
// 测试链接 : https://www.nowcoder.com/practice/7037a3d57bbd4336856b8e16a9cafd71
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下的code,提交时请把类名改成"Main",可以直接通过

package class051;// 机器人跳跃问题
// 机器人正在玩一个古老的基于DOS的游戏
// 游戏中有N+1座建筑,从0到N编号,从左到右排列
// 编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位
// 起初机器人在编号为0的建筑处
// 每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E
// 下一步它将跳到第个k+1建筑
// 它将会得到或者失去正比于与H(k+1)与E之差的能量
// 如果 H(k+1) > E 那么机器人就失去H(k+1)-E的能量值,否则它将得到E-H(k+1)的能量值
// 游戏目标是到达第个N建筑,在这个过程中,能量值不能为负数个单位
// 现在的问题是机器人以多少能量值开始游戏,才可以保证成功完成游戏
// 测试链接 : https://www.nowcoder.com/practice/7037a3d57bbd4336856b8e16a9cafd71
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下的code,提交时请把类名改成"Main",可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class Code03_RobotPassThroughBuilding {public static int MAXN = 100001;public static int[] arr = new int[MAXN];public static int n;public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;int l = 0;int r = 0;for (int i = 1; i <= n; i++) {in.nextToken();arr[i] = (int) in.nval;r = Math.max(r, arr[i]);}out.println(compute(l, r, r));}out.flush();out.close();br.close();}// [l,r]通关所需最小能量的范围,不停二分// max是所有建筑的最大高度// 时间复杂度O(n * log(max)),额外空间复杂度O(1)public static int compute(int l, int r, int max) {int m, ans = -1;while (l <= r) {// m中点,此时通关所需规定的初始能量m = l + ((r - l) >> 1);if (f(m, max)) {ans = m;r = m - 1;} else {l = m + 1;}}return ans;}// 初始能量为energy,max是建筑的最大高度,返回能不能通关// 为什么要给定建筑的最大高度?public static boolean f(int energy, int max) {// 注意!// 如果给的能量值很大,那么后续能量增长将非常恐怖// 完全有可能超出long的范围// 所以要在遍历时,一定要加入energy >= max的判断// 一旦能量超过高度最大值,后面肯定通关了,可以提前返回了// 这里很阴for (int i = 1; i <= n; i++) {if (energy <= arr[i]) {energy -= arr[i] - energy;} else {energy += energy - arr[i];}if (energy >= max) {return true;}if (energy < 0) {return false;}}return true;}}

code4 719. 找出第 K 小的数对距离

// 找出第K小的数对距离
// 数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。
// 给你一个整数数组 nums 和一个整数 k
// 数对由 nums[i] 和 nums[j] 组成且满足 0 <= i < j < nums.length
// 返回 所有数对距离中 第 k 小的数对距离。
// 测试链接 : https://leetcode.cn/problems/find-k-th-smallest-pair-distance/

package class051;import java.util.Arrays;// 找出第K小的数对距离
// 数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。
// 给你一个整数数组 nums 和一个整数 k
// 数对由 nums[i] 和 nums[j] 组成且满足 0 <= i < j < nums.length
// 返回 所有数对距离中 第 k 小的数对距离。
// 测试链接 : https://leetcode.cn/problems/find-k-th-smallest-pair-distance/
public class Code04_FindKthSmallestPairDistance {// 时间复杂度O(n * log(n) + log(max-min) * n),额外空间复杂度O(1)public static int smallestDistancePair(int[] nums, int k) {int n = nums.length;Arrays.sort(nums);int ans = 0;// [0, 最大-最小],不停二分for (int l = 0, r = nums[n - 1] - nums[0], m, cnt; l <= r;) {// m中点,arr中任意两数的差值 <= mm = l + ((r - l) >> 1);// 返回数字对的数量cnt = f(nums, m);if (cnt >= k) {ans = m;r = m - 1;} else {l = m + 1;}}return ans;}// arr中任意两数的差值 <= limit// 这样的数字配对,有几对?public static int f(int[] arr, int limit) {int ans = 0;// O(n)for (int l = 0, r = 0; l < arr.length; l++) {// l......r r+1while (r + 1 < arr.length && arr[r + 1] - arr[l] <= limit) {r++;}// arr[l...r]范围上的数差值的绝对值都不超过limit// arr[0...3]// 0,1// 0,2// 0,3ans += r - l;}return ans;}}

code5 2141. 同时运行 N 台电脑的最长时间

// 同时运行N台电脑的最长时间
// 你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries
// 其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟
// 你想使用这些电池让 全部 n 台电脑 同时 运行。
// 一开始,你可以给每台电脑连接 至多一个电池
// 然后在任意整数时刻,你都可以将一台电脑与它的电池断开连接,并连接另一个电池,你可以进行这个操作 任意次
// 新连接的电池可以是一个全新的电池,也可以是别的电脑用过的电池
// 断开连接和连接新的电池不会花费任何时间。
// 注意,你不能给电池充电。
// 请你返回你可以让 n 台电脑同时运行的 最长 分钟数。
// 测试链接 : https://leetcode.cn/problems/maximum-running-time-of-n-computers/

package class051;// 同时运行N台电脑的最长时间
// 你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries
// 其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟
// 你想使用这些电池让 全部 n 台电脑 同时 运行。
// 一开始,你可以给每台电脑连接 至多一个电池
// 然后在任意整数时刻,你都可以将一台电脑与它的电池断开连接,并连接另一个电池,你可以进行这个操作 任意次
// 新连接的电池可以是一个全新的电池,也可以是别的电脑用过的电池
// 断开连接和连接新的电池不会花费任何时间。
// 注意,你不能给电池充电。
// 请你返回你可以让 n 台电脑同时运行的 最长 分钟数。
// 测试链接 : https://leetcode.cn/problems/maximum-running-time-of-n-computers/
public class Code05_MaximumRunningTimeOfNComputers {// 单纯的二分答案法// 提交时把函数名改为maxRunTime// 时间复杂度O(n * log(sum)),额外空间复杂度O(1)public static long maxRunTime1(int num, int[] arr) {long sum = 0;for (int x : arr) {sum += x;}long ans = 0;// [0, sum],不停二分for (long l = 0, r = sum, m; l <= r;) {// m中点,让num台电脑共同运行m分钟,能不能做到m = l + ((r - l) >> 1);if (f1(arr, num, m)) {ans = m;l = m + 1;} else {r = m - 1;}}return ans;}// 让num台电脑共同运行time分钟,能不能做到public static boolean f1(int[] arr, int num, long time) {// 碎片电量总和long sum = 0;for (int x : arr) {if (x > time) {num--;} else {// x <= time,是碎片电池sum += x;}if (sum >= (long) num * time) {// 碎片电量 >= 台数 * 要求return true;}}return false;}// 二分答案法 + 增加分析(贪心)// 提交时把函数名改为maxRunTime// 时间复杂度O(n * log(max)),额外空间复杂度O(1)public static long maxRunTime2(int num, int[] arr) {int max = 0;long sum = 0;for (int x : arr) {max = Math.max(max, x);sum += x;}// 就是增加了这里的逻辑if (sum > (long) max * num) {// 所有电池的最大电量是max// 如果此时sum > (long) max * num,// 说明 : 最终的供电时间一定在 >= max,而如果最终的供电时间 >= max// 说明 : 对于最终的答案X来说,所有电池都是课上讲的"碎片拼接"的概念// 那么寻找 ? * num <= sum 的情况中,尽量大的 ? 即可// 即sum / numreturn sum / num;}// 最终的供电时间一定在 < max范围上// [0, sum]二分范围,可能定的比较粗,虽然不影响,但毕竟是有点慢// [0, max]二分范围!更精细的范围,二分次数会变少int ans = 0;for (int l = 0, r = max, m; l <= r;) {m = l + ((r - l) >> 1);if (f2(arr, num, m)) {ans = m;l = m + 1;} else {r = m - 1;}}return ans;}public static boolean f2(int[] arr, int num, int time) {// 碎片电量总和long sum = 0;for (int x : arr) {if (x > time) {num--;} else {sum += x;}if (sum >= (long) num * time) {return true;}}return false;}}

code6 计算等位时间

// 计算等位时间
// 给定一个数组arr长度为n,表示n个服务员,每服务一个人的时间
// 给定一个正数m,表示有m个人等位,如果你是刚来的人,请问你需要等多久?
// 假设m远远大于n,比如n <= 10^3, m <= 10^9,该怎么做是最优解?
// 谷歌的面试,这个题连考了2个月
// 找不到测试链接,所以用对数器验证

package class051;import java.util.PriorityQueue;// 计算等位时间
// 给定一个数组arr长度为n,表示n个服务员,每服务一个人的时间
// 给定一个正数m,表示有m个人等位,如果你是刚来的人,请问你需要等多久?
// 假设m远远大于n,比如n <= 10^3, m <= 10^9,该怎么做是最优解?
// 谷歌的面试,这个题连考了2个月
// 找不到测试链接,所以用对数器验证
public class Code06_WaitingTime {// 堆模拟// 验证方法,不是重点// 如果m很大,该方法会超时// 时间复杂度O(m * log(n)),额外空间复杂度O(n)public static int waitingTime1(int[] arr, int m) {// 一个一个对象int[]// [醒来时间,服务一个客人要多久]PriorityQueue<int[]> heap = new PriorityQueue<>((a, b) -> (a[0] - b[0]));int n = arr.length;for (int i = 0; i < n; i++) {heap.add(new int[] { 0, arr[i] });}for (int i = 0; i < m; i++) {int[] cur = heap.poll();cur[0] += cur[1];heap.add(cur);}return heap.peek()[0];}// 二分答案法// 最优解// 时间复杂度O(n * log(min * w)),额外空间复杂度O(1)public static int waitingTime2(int[] arr, int w) {int min = Integer.MAX_VALUE;for (int x : arr) {min = Math.min(min, x);}int ans = 0;for (int l = 0, r = min * w, m; l <= r;) {// m中点,表示一定要让服务员工作的时间!m = l + ((r - l) >> 1);// 能够给几个客人提供服务if (f(arr, m) >= w + 1) {ans = m;r = m - 1;} else {l = m + 1;}}return ans;}// 如果每个服务员工作time,可以接待几位客人(结束的、开始的客人都算)public static int f(int[] arr, int time) {int ans = 0;for (int num : arr) {ans += (time / num) + 1;}return ans;}// 对数器测试public static void main(String[] args) {System.out.println("测试开始");int N = 50;int V = 30;int M = 3000;int testTime = 20000;for (int i = 0; i < testTime; i++) {int n = (int) (Math.random() * N) + 1;int[] arr = randomArray(n, V);int m = (int) (Math.random() * M);int ans1 = waitingTime1(arr, m);int ans2 = waitingTime2(arr, m);if (ans1 != ans2) {System.out.println("出错了!");}}System.out.println("测试结束");}// 对数器测试public static int[] randomArray(int n, int v) {int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = (int) (Math.random() * v) + 1;}return arr;}}

code7 刀砍毒杀怪兽问题

// 刀砍毒杀怪兽问题
// 怪兽的初始血量是一个整数hp,给出每一回合刀砍和毒杀的数值cuts和poisons
// 第i回合如果用刀砍,怪兽在这回合会直接损失cuts[i]的血,不再有后续效果
// 第i回合如果用毒杀,怪兽在这回合不会损失血量,但是之后每回合都损失poisons[i]的血量
// 并且你选择的所有毒杀效果,在之后的回合都会叠加
// 两个数组cuts、poisons,长度都是n,代表你一共可以进行n回合
// 每一回合你只能选择刀砍或者毒杀中的一个动作
// 如果你在n个回合内没有直接杀死怪兽,意味着你已经无法有新的行动了
// 但是怪兽如果有中毒效果的话,那么怪兽依然会在血量耗尽的那回合死掉
// 返回至少多少回合,怪兽会死掉
// 数据范围 :
// 1 <= n <= 10^5
// 1 <= hp <= 10^9
// 1 <= cuts[i]、poisons[i] <= 10^9
// 本题来自真实大厂笔试,找不到测试链接,所以用对数器验证

package class051;// 刀砍毒杀怪兽问题
// 怪兽的初始血量是一个整数hp,给出每一回合刀砍和毒杀的数值cuts和poisons
// 第i回合如果用刀砍,怪兽在这回合会直接损失cuts[i]的血,不再有后续效果
// 第i回合如果用毒杀,怪兽在这回合不会损失血量,但是之后每回合都损失poisons[i]的血量
// 并且你选择的所有毒杀效果,在之后的回合都会叠加
// 两个数组cuts、poisons,长度都是n,代表你一共可以进行n回合
// 每一回合你只能选择刀砍或者毒杀中的一个动作
// 如果你在n个回合内没有直接杀死怪兽,意味着你已经无法有新的行动了
// 但是怪兽如果有中毒效果的话,那么怪兽依然会在血量耗尽的那回合死掉
// 返回至少多少回合,怪兽会死掉
// 数据范围 : 
// 1 <= n <= 10^5
// 1 <= hp <= 10^9
// 1 <= cuts[i]、poisons[i] <= 10^9
// 本题来自真实大厂笔试,找不到测试链接,所以用对数器验证
public class Code07_CutOrPoison {// 动态规划方法(只是为了验证)// 目前没有讲动态规划,所以不需要理解这个函数// 这个函数只是为了验证二分答案的方法是否正确的// 纯粹为了写对数器验证才设计的方法,血量比较大的时候会超时// 这个方法不做要求,此时并不需要理解,可以在学习完动态规划章节之后来看看这个函数public static int fast1(int[] cuts, int[] poisons, int hp) {int sum = 0;for (int num : poisons) {sum += num;}int[][][] dp = new int[cuts.length][hp + 1][sum + 1];return f1(cuts, poisons, 0, hp, 0, dp);}// 不做要求public static int f1(int[] cuts, int[] poisons, int i, int r, int p, int[][][] dp) {r -= p;if (r <= 0) {return i + 1;}if (i == cuts.length) {if (p == 0) {return Integer.MAX_VALUE;} else {return cuts.length + 1 + (r + p - 1) / p;}}if (dp[i][r][p] != 0) {return dp[i][r][p];}int p1 = r <= cuts[i] ? (i + 1) : f1(cuts, poisons, i + 1, r - cuts[i], p, dp);int p2 = f1(cuts, poisons, i + 1, r, p + poisons[i], dp);int ans = Math.min(p1, p2);dp[i][r][p] = ans;return ans;}// 二分答案法// 最优解// 时间复杂度O(n * log(hp)),额外空间复杂度O(1)public static int fast2(int[] cuts, int[] poisons, int hp) {int ans = Integer.MAX_VALUE;for (int l = 1, r = hp + 1, m; l <= r;) {// m中点,一定要让怪兽在m回合内死掉,更多回合无意义m = l + ((r - l) >> 1);if (f(cuts, poisons, hp, m)) {ans = m;r = m - 1;} else {l = m + 1;}}return ans;}// cuts、posions,每一回合刀砍、毒杀的效果// hp:怪兽血量// limit:回合的限制public static boolean f(int[] cuts, int[] posions, long hp, int limit) {int n = Math.min(cuts.length, limit);for (int i = 0, j = 1; i < n; i++, j++) {hp -= Math.max((long) cuts[i], (long) (limit - j) * (long) posions[i]);if (hp <= 0) {return true;}}return false;}// 对数器测试public static void main(String[] args) {// 随机测试的数据量不大// 因为数据量大了,fast1方法会超时// 所以在数据量不大的情况下,验证fast2方法功能正确即可// fast2方法在大数据量的情况下一定也能通过// 因为时间复杂度就是最优的System.out.println("测试开始");int N = 30;int V = 20;int H = 300;int testTimes = 10000;for (int i = 0; i < testTimes; i++) {int n = (int) (Math.random() * N) + 1;int[] cuts = randomArray(n, V);int[] posions = randomArray(n, V);int hp = (int) (Math.random() * H) + 1;int ans1 = fast1(cuts, posions, hp);int ans2 = fast2(cuts, posions, hp);if (ans1 != ans2) {System.out.println("出错了!");}}System.out.println("测试结束");}// 对数器测试public static int[] randomArray(int n, int v) {int[] ans = new int[n];for (int i = 0; i < n; i++) {ans[i] = (int) (Math.random() * v) + 1;}return ans;}}

滴滴20230908 糖果工厂

糖果工厂可以生产n种不同的糖果,假设这些糖果的编号分别为1到n,每一天工厂可以生产ci个编号为i的糖果。
今天工厂接到了一个订单,需求是a包糖果,且每包糖果必须是同一种类的,每包数量不能少于b个。假设糖果工厂在无存货的情况下,至少需要多少天才能完成这个订单?

输入描述
第一行是三个正整数n、a、b,分别表示糖果工厂可以生成的糖果种类数,订单的需求是a包糖果,每包不少于b个。
第二行是n个正整数c1c2…cn,其中第i个数ci表示工厂每天能生产的编号为i的糖果的数量。对所有的数据证:1<=n<=100000,1<=a,b<=10^7,1<=ci<=10000

输出描述
一行一个正整数,表示完成订单所需的最少天数

输入
3 10 20
7 9 6输出
10

/*
工厂可以生产n种糖果,糖果编号为1到n,工厂每天生产i号糖果的数量为arr【i】,不同编号的糖果并行生产。
工厂接到一个订单,要求是a包糖果、每包糖果必须是同一种类、每包的数量不能少于b个。
一种糖果可以生产很多包。返回至少需要多少天才能完成订单。解法:根据天数二分。假设生产x天,那么每号糖果都可以算出生产x天能凑几包,然后看看所有糖果能不能凑够a包。
凑不够在x右侧二分;凑够让ans=x,去x左侧二分。学起来吧!二分答案法真的重要!输入
3 10 20
7 9 6
输出
10*/
public class Main {public static void main(String[] args) {int n=3;int a=10;int b=20;int[] arr=new int[]{7,9,6};int max=0;for (int i = 0; i < n; i++) {max=Math.max(max,arr[i]);}int l=1;int r=a*b/max;int res=0;while (l<=r){int m=(l+r)/2;int cur=f(arr,b,m);if(cur>=a){res=m;r=m-1;}else {l=m+1;}}System.out.println(res);}//生产x天,每包b个,能够有多少包糖果public static int f(int[] arr,int b,int x){int res=0;for (int n:arr){res+=n*x/b;}return res;}}

2023-12-6 19:06:27

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/253413.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows利用MMDeploy部署OpenMMLab 模型并使用Python进行部署

目录 前言 一、准备工作 二、安装 MMDeploy 总结 前言 近期在用OpenMMLab构建模型&#xff0c;然后需要使用MMDeploy对模型进行部署。虽然官方文档提供了详细的说明&#xff0c;但是写的太繁琐了&#xff0c;而且在实际部署过程中&#xff0c;发现并不是所有步骤和内容都需要&…

MySQL数据库基础篇

文章目录 前言1.MySQL数据库概述2.SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作 2.4 图形化界面工具2.5 DML2.5.1 添加数据2.5.2 修改数据2.5.3 删除数据 2.6 DQL2.6.1 基本语法2.6.2 基础查询2.6.3 条件查询2.6.4 聚合函数2.6.5 分组查询2.6.6 排序查询…

deepflow本地部署过程

本地服务器配置&#xff0c;32C&#xff0c;48G内存 整个过程需要配置k8s&#xff0c;安装helm, 安装grafana, 安装deepflow以及deepflow-ctl&#xff0c;以及部署demo 在采用sealos进行ALL-IN-ONE部署之前&#xff0c; grafana 先安装它 wget -q -O /usr/share/keyrings/gr…

智能优化算法应用:基于蜜獾算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜜獾算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜜獾算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜜獾算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

python+requests+excel 接口测试

1、EXCEL文件接口保存方式&#xff0c;如图。 2、然后就是读取EXCEL文件中的数据方法&#xff0c;如下&#xff1a; 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

【JavaWeb学习笔记】6 - Tomcat

项目代码 零、在线文档 Apache Tomcat 8 (8.0.53) - Documentation Index WEB开发 1. WEB,在英语中web表示网/网络资源(页面&#xff0c;图片,css,js)意思&#xff0c;它用于表示WEB服务器(主机)供浏览器访问的资源 2. WEB服务器(主机)上供外界访问的Web资源分为: 静态web…

区块链创新应用场景不断拓展,实现去中心化

小编介绍&#xff1a;10年专注商业模式设计及软件开发&#xff0c;擅长企业生态商业模式&#xff0c;商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地&#xff1b;扶持10余个电商平台做到营收过千万&#xff0c;数百个平台达到百万会员&#xff0c;欢迎咨询。 区块…

python自动化测试框架:unittest测试用例编写及执行

本文将介绍 unittest 自动化测试用例编写及执行的相关内容&#xff0c;包括测试用例编写、测试用例执行、测试报告等内容。 官方文档&#xff1a; https://docs.python.org/zh-cn/3/library/unittest.mock.html 1. 测试用例编写 在 unittest 中&#xff0c;一个测试用例通常…

外包干了3个月,技术倒退2年。。。

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

01-Redis核心数据结构与高性能原理

一、Redis的单线程和高性能 1. Redis是单线程吗&#xff1f; Redis的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff08;说白了也就是执行命令的时候是由一个线程来完成的&#xff09;&#xff0c;这也是 Redis 对外提供键值存储服务的主要流程。…

DALI1.0学习——BIT解码

最近在学习DALI调光相关知识并下载了Microchip提供的基于ATMega88PA的软件工程及硬件设计参考方案。写这些文章的目的就是把自己对知识的理解作一些梳理。 芯片厂果然专业&#xff0c;考虑得相当周到&#xff0c;为了芯片销量连软件和硬件方案全都提供了。芯片厂关于DALI1.0实…

蓝桥杯day04——查询后矩阵的和

1.题目 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries &#xff0c;其中 queries[i] [typei, indexi, vali] 。 一开始&#xff0c;给你一个下标从 0 开始的 n x n 矩阵&#xff0c;所有元素均为 0 。每一个查询&#xff0c;你需要执行以下操作之一&#xff1a; …

JavaSE基础50题:6. 求出0~999之间的所有“水仙花数”并输出

概念 “水仙花数”是指一个三位数&#xff0c;其各位数字的立方和确好等于该数本身。 如&#xff1a;153 135333,则153是一个“水仙花数”。 【方法】 如何获得每一位的数&#xff1a;如(153) 个位: 153 % 10 3 十位: 153 / 10 15 15 % 10 5 百位: 153 / 100 1 代码 pu…

书-用数组存储高于60低于70的人单独存起来

#include<stdio.h> # define N 10 //书-用数组存储高于60低于70的人单独存起来 int main(){float s[N]{68.2,62.3,63.4,34.5,45.6,56.7,67.8,78.9,89.0,100};int i;float diyu[100];int j0;for(i0;i<N;i){if(s[i]>60 && s[i]<70)diyu[j]s[i];//这里的范…

消息队列zookeeper集群+kafka

消息队列zookeeper集群kafka kafka 3.0之前依赖于zookpeeper zookeeper开源分布式架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据。分布式节点的服务结束观察者的注册&#xff0c;一旦分布式节点…

docker搭建logstash和使用方法

配置logstash 查询下载镜像【固定和elasticsearch一样的版本】 [roothao ~]# docker search logstash NAME DESCRIPTION STARS OFFICIAL AUTOMATED logstash …

【数据分享】11个城市的出租车(网约车)数据(免费获取)

出租车&#xff08;网约车&#xff09;GPS数据是我们最常使用的交通大数据之一&#xff0c;但是出租车&#xff08;网约车&#xff09;GPS数据没有公开的获取渠道&#xff0c;有些学者可能能通过与相关机构合作拿到数据&#xff0c;但是对于绝大多数普通人是没有这个机会的&…

LeetCode Hot100 200.岛屿数量

题目&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…

2023年最详细介绍Linux 系统目录结构!你确定不来了解一下吗?

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

AWS CodeWhisperer:基于机器学习的代码建议工具

#AWS CodeWhisperer&#xff1a;基于机器学习的代码建议工具 AWS CodeWhisper概述 Amazon CodeWhisperer 是一种基于机器学习&#xff08;ML&#xff09;的服务&#xff0c;它可以根据Amazon CodeWhisperer 是一种基于机器学习&#xff08;ML&#xff09;的服务&#xff0c;它…