游游拿到的一个数组,其中一些数被染成红色,另一些数被染成蓝色。 游游每次操作,可以使得所有红色的数加1,或者可以使得所有蓝色的数减1。一共可以操作任意次。 游游希望最终数组的最大值减去最小值的差尽可能小,你能帮她求出这个差吗?
区块链毕设网qklbishe.com为您提供问题的解答
游游拿到的一个数组,其中一些数被染成红色,另一些数被染成蓝色。
游游每次操作,可以使得所有红色的数加1,或者可以使得所有蓝色的数减1。一共可以操作任意次。
游游希望最终数组的最大值减去最小值的差尽可能小,你能帮她求出这个差吗?
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int n = in.nextInt(); while (in.hasNextInt()) { // 注意 while 处理多个 case int m = in.nextInt(); int nums[] = new int[m]; for(int i = 0;i<m;i++) { nums[i] = in.nextInt(); } String colors = in.next(); int ans = calculate(m,nums,colors); System.out.println(ans); } } public static int calculate(int m, int nums[], String colors) { int maxR = Integer.MIN_VALUE, maxB = Integer.MIN_VALUE; int minR = Integer.MAX_VALUE, minB = Integer.MAX_VALUE; for(int i = 0;i<m;i++) { if (colors.charAt(i) == 'R') { maxR = Math.max(maxR, nums[i]); minR = Math.min(minR, nums[i]); } else { minB = Math.min(minB, nums[i]); maxB = Math.max(maxB, nums[i]); } } int curMax = Math.max(maxR, maxB); int curMin = Math.min(minR, minB); int ans = curMax - curMin; while(maxR < maxB) { maxR ++; minR ++; } while(maxB > maxR) { maxB --; minB --; } ans = Math.min(ans, maxR - Math.min(minR, minB)); return ans; } }
11:09
以上就是关于问题游游拿到的一个数组,其中一些数被染成红色,另一些数被染成蓝色。
游游每次操作,可以使得所有红色的数加1,或者可以使得所有蓝色的数减1。一共可以操作任意次。
游游希望最终数组的最大值减去最小值的差尽可能小,你能帮她求出这个差吗?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训