中国建设银行网站简介,多梦wordpress,wordpress插件文件,国内的跨境电商平台有哪些第一题#xff1a; 这个题是一个简单题#xff0c;数据范围也特别小#xff0c;所以直接使用模拟方式暴力解答。
直接进行行移动的过程#xff0c;然后检查移动后的结果是否与移动前相同。
代码#xff1a;
public class Solution {// 将指定行循环右移k次pri…第一题 这个题是一个简单题数据范围也特别小所以直接使用模拟方式暴力解答。
直接进行行移动的过程然后检查移动后的结果是否与移动前相同。
代码
public class Solution {// 将指定行循环右移k次private int[] rotateRow(int[] row, int k) {int[] rotatedRow new int[row.length];for (int i 0; i row.length; i) {rotatedRow[(i k) % row.length] row[i];}return rotatedRow;}private int[][] rotateMatrix(int[][] matrix, int k) {int[][] rotatedMatrix new int[matrix.length][matrix[0].length];for (int i 0; i rotatedMatrix.length; i) {if (i % 2 0) {rotatedMatrix[i] rotateRow(matrix[i], k % matrix[i].length);} else {rotatedMatrix[i] rotateRow(matrix[i], matrix[i].length - (k % matrix[i].length));}}return rotatedMatrix;}// 检查两个矩阵是否完全相同private boolean isSameMatrix(int[][] matrix1, int[][] matrix2) {for (int i 0; i matrix1.length; i) {for (int j 0; j matrix1[0].length; j) {if (matrix1[i][j] ! matrix2[i][j]) {return false;}}}return true;}// 判断初始矩阵和最终矩阵是否相同public boolean areSimilar(int[][] matrix, int k) {int[][] originalMatrix new int[matrix.length][matrix[0].length];for (int i 0; i matrix.length; i) {originalMatrix[i] matrix[i].clone(); // 创建矩阵的副本}int[][] rotatedMatrix rotateMatrix(matrix, k); // 循环移动k次return isSameMatrix(originalMatrix, rotatedMatrix);}
}
第二题 这个题目的思路也比较简单主要就是两个方面进行考虑一进行子字符串的截取二判断子字符串是否是美丽字符串。子字符串的截取采用双指针进行解决通过双指针的移动来不断截取子字符串然后去判断当前截取的子字符串两种字符的数量是否满足规则。代码如下
class Solution {public int beautifulSubstrings(String s, int k) {int count 0;for (int i 0; i s.length(); i) {int vowels 0;int consonants 0;for (int j i; j s.length(); j) {char c s.charAt(j);if (isVowel(c)) {vowels;} else {consonants;}if (vowels consonants (vowels * consonants) % k 0) {count;}}}return count;}private boolean isVowel(char c) {c Character.toLowerCase(c);return c a || c e || c i || c o || c u;}
}
第三题: 这个题目的思路是分组排序把差距在limit的数字分为一组每一组中的数据可以直接排序然后把这个结果插入回原来的数组中就得到结果。对于这个题目的解决思路就是先把所有元素进行排序然后记录原始的下标然后通过limit来进行元素的分组。分好组后针对每个分组的下标进行排序然后把最小的元素放在最小的下标。这样就得到了问题结果。
class Solution {public int[] lexicographicallySmallestArray(int[] nums, int limit) {int n nums.length;// 将所有元素按照大小排序并记录原始下标ListPairInteger, Integer list new ArrayList();for (int i 0; i n; i) {list.add(new Pair(nums[i], i));}list.sort((a, b) - a.getKey() - b.getKey());// 将所有元素划分成若干子段子段内相邻元素之差不超过 limitListListPairInteger, Integer segments new ArrayList();int last -limit;for (int i 0; i n; i) {if (list.get(i).getKey() - last limit) {segments.add(new ArrayList());}segments.get(segments.size() - 1).add(list.get(i));last list.get(i).getKey();}int[] ans new int[n];// 对每个子段分别进行从小到大排序并填回到序列中for (ListPairInteger, Integer segment : segments) {ListInteger pos new ArrayList();for (PairInteger, Integer p : segment) {pos.add(p.getValue());}pos.sort(Comparator.naturalOrder());for (int i 0; i segment.size(); i) {ans[pos.get(i)] segment.get(i).getKey();}}return ans;}
}