前言

第一次打比赛,熟悉一下难度和赛制。

第一题:重复至少 K 次且长度为 M 的模式

题解一:模拟

从头开始一次匹配,找到符合要求的就返回true。

  1. class Solution {
  2. public boolean containsPattern(int[] arr, int m, int k) {
  3. boolean ans = false;
  4. int[] pattern = new int[m];
  5. int[] other = new int[m];
  6. int count;
  7. for (int i = 0; i < arr.length - m; ++i) {
  8. pattern = Arrays.copyOfRange(arr, i, i + m);
  9. count = 1;
  10. for (int j = i + m; j <= arr.length - m; j += m) {
  11. other = Arrays.copyOfRange(arr, j, j + m);
  12. if (Arrays.equals(pattern, other)) {
  13. ++count;
  14. } else {
  15. break;
  16. }
  17. }
  18. if (count >= k) {
  19. ans = true;
  20. break;
  21. }
  22. }
  23. return ans;
  24. }
  25. }

第二题:乘积为正数的最长子数组长度

题解一:

思路。

  1. class Solution {
  2. public int getMaxLen(int[] nums) {
  3. List<Integer> list;
  4. List<Integer> indexList;
  5. int max = 0;
  6. int i = 0;
  7. // 跳过0
  8. while ((i < nums.length) && (nums[i] == 0)) {
  9. ++i;
  10. }
  11. for (; i < nums.length;) {
  12. list = new LinkedList<>();
  13. while ((i < nums.length) && (nums[i] != 0)) {
  14. list.add(nums[i]);
  15. ++i;
  16. }
  17. if ((i < nums.length) && (nums[i] == 0)) {
  18. ++i;
  19. }
  20. if (list.isEmpty()) {
  21. continue;
  22. }
  23. indexList = new ArrayList<>(list.size());
  24. int index = 0;
  25. for (Iterator<Integer> iter = list.iterator(); iter.hasNext(); ++index) {
  26. int e = iter.next();
  27. if (e < 0) {
  28. indexList.add(index);
  29. }
  30. }
  31. if (indexList.size() % 2 == 0) {
  32. max = Math.max(list.size(), max);
  33. continue;
  34. }
  35. if (indexList.size() == 1) {
  36. max = Math.max(list.size() - indexList.get(0) - 1, max);
  37. max = Math.max(indexList.get(0), max);
  38. continue;
  39. }
  40. // 第一个负数的下标
  41. int first = indexList.get(0);
  42. // 最后一个负数的下标
  43. int last = indexList.get(indexList.size() - 1);
  44. max = Math.max(last, max);
  45. max = Math.max(list.size() - first - 1, max);
  46. }
  47. return max;
  48. }
  49. }

第三题:使陆地分离的最少天数

题解一:

思路。

第四题:将子数组重新排序得到同一个二叉查找树的方案数

题解一:

思路。