字节9.3前端笔试编程题
-
小红拿到长度为n的数组,陡峭值是相邻两数差的绝对值之和,求只修改第i个元素,让f(i)最小的各个陡峭值
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); long[] nums = new long[n]; for (int i = 0; i < n; i++) { nums[i] = in.nextLong(); } if (n == 1) { System.out.print("0"); return; } long count = 0; // 默认陡峭值 for (int i = 1; i < n; i++) { count += Math.abs(nums[i] - nums[i - 1]); } long[] result = new long[n]; for (int i = 0; i < n; i++) { if (i == 0) { result[i] = count - Math.abs(nums[i + 1] - nums[i]); } else if (i == n - 1) { result[i] = count - Math.abs(nums[i - 1] - nums[i]); } else { long temp = Math.abs(nums[i] - nums[i - 1]) + Math.abs(nums[i] - nums[i + 1]) - Math.abs(nums[i - 1] - nums[i + 1]); result[i] = count - temp; } } for (int i = 0; i < n; i++) { System.out.print(result[i] + " "); } } }
-
小红的字符串构造,每个小写字母都要出现至少两次,而且相同字母的最小距离刚好是k。
const fun = function (k) { const arr = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x' ] let pos = 0 let str = '' while (pos < 26) { const temp = arr.slice(pos, pos + k).join("") str += temp + temp pos += k } console.log(str) } fun(1) fun(2) fun(3) fun(4)