建站软件排名,免费的企业网站建设流程,wordpress 匿名投票,网页制作题库题目一 特殊元素平方和 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 对 nums 中的元素 nums[i] 而言#xff0c;如果 n 能够被 i 整除#xff0c;即 n % i 0 #xff0c;则认为 num[i] 是一个 特殊元素 。 返回 nums 中所有 特殊元素 的 平方和 。 直接模拟就好了…题目一 特殊元素平方和 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 对 nums 中的元素 nums[i] 而言如果 n 能够被 i 整除即 n % i 0 则认为 num[i] 是一个 特殊元素 。 返回 nums 中所有 特殊元素 的 平方和 。 直接模拟就好了
class Solution {public int sumOfSquares(int[] nums) {int n nums.length;ListInteger l new ArrayList();for (int i0; in; i) {if (n % (i1) 0) {l.add(nums[i]);}}int sum 0;for (int i: l) {sum (i*i);}return sum;}
}题目二 数组的最大美丽值 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操作中你可以执行下述指令 在范围 [0, nums.length - 1] 中选择一个 此前没有选过 的下标 i 。将 nums[i] 替换为范围 [nums[i] - k, nums[i] k] 内的任一整数。 数组的 美丽值 定义为数组中由相等元素组成的最长子序列的长度。 对数组 nums 执行上述操作任意次后返回数组可能取得的 最大 美丽值。 注意你 只 能对每个下标执行 一次 此操作。 数组的 子序列 定义是经由原数组删除一些元素也可能不删除得到的一个新数组且在此过程中剩余元素的顺序不发生改变。 class Solution {// 因为是子序列所以可以排序// 因为将nums[i]替换为左右为k得数所以我们选择得肯定为一个连续序列// 则此时我们要寻找一个子数组// 子数组的最大值-最小值 2*kpublic int maximumBeauty(int[] nums, int k) {Arrays.sort(nums);int left 0; // 左闭右闭int right 0;int ans 0;while (right nums.length left right) {if (nums[right] - nums[left] 2*k) {ans Math.max(ans, right - left 1);right;} else {left;}}return ans;}
}同时我们也可以使用 差分数组 来表示各数的频率其中频率最高的即为最终所求
2780. 合法分割的最小下标
如果元素 x 在长度为 m 的整数数组 arr 中满足 freq(x) * 2 m 那么我们称 x 是 支配元素 。其中 freq(x) 是 x 在数组 arr 中出现的次数。注意根据这个定义数组 arr 最多 只会有 一个 支配元素。
给你一个下标从 0 开始长度为 n 的整数数组 nums 数据保证它含有一个支配元素。
你需要在下标 i 处将 nums 分割成两个数组 nums[0, …, i] 和 nums[i 1, …, n - 1] 如果一个分割满足以下条件我们称它是 合法 的
0 i n - 1nums[0, …, i] 和 nums[i 1, …, n - 1] 的支配元素相同。
这里 nums[i, …, j] 表示 nums 的一个子数组它开始于下标 i 结束于下标 j 两个端点都包含在子数组内。特别地如果 j i 那么 nums[i, …, j] 表示一个空数组。
请你返回一个 合法分割 的 最小 下标。如果合法分割不存在返回 -1 。
思路
我们首先声明两个map一个用于记录左侧子数组的频率left一个用于记录右侧right。在最初时我们设分割点idx为-1也即 left为空right记录整个数组的频率。 然后我们从左向右移动分割点idx并更新left与right同时判断被更新的点是否满足freq(x) * 2 m并判断相等
class Solution {public int minimumIndex(ListInteger nums) {MapInteger, Integer left new HashMap();MapInteger, Integer right new HashMap();for (int i0; inums.size(); i) {right.put(nums.get(i), right.getOrDefault(nums.get(i), 0)1);}int ans 0;for (int i0; inums.size(); i) {left.put(nums.get(i), left.getOrDefault(nums.get(i), 0)1);right.put(nums.get(i), right.getOrDefault(nums.get(i), 0)-1);int l left.getOrDefault(nums.get(i), 0);int r right.getOrDefault(nums.get(i), 0);if (l*2 i1 r*2 nums.size()-i-1) {return i;}}return -1;}
}