From ccf7dcc5b5e8ee557094fc819f536ef51f6525ac Mon Sep 17 00:00:00 2001 From: "huangge1199@hotmail.com" Date: Sun, 3 Oct 2021 10:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8C=E5=91=A862?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/code/leet/doubleWeek/SolutionD62.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/main/java/com/code/leet/doubleWeek/SolutionD62.java diff --git a/src/main/java/com/code/leet/doubleWeek/SolutionD62.java b/src/main/java/com/code/leet/doubleWeek/SolutionD62.java new file mode 100644 index 0000000..be5b063 --- /dev/null +++ b/src/main/java/com/code/leet/doubleWeek/SolutionD62.java @@ -0,0 +1,107 @@ +package com.code.leet.doubleWeek; + +import java.math.BigInteger; +import java.util.*; + +public class SolutionD62 { + public static void main(String[] args) { + SolutionD62 solution = new SolutionD62(); + System.out.println(solution.waysToPartition(new int[]{22,4,-25,-20,-15,15,-16,7,19,-10,0,-13,-14}, -33)); + } + + public int[][] construct2DArray(int[] original, int m, int n) { + if (original.length != m * n) { + return new int[][]{}; + } + int[][] arrs = new int[m][n]; + int index = 0; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + arrs[i][j] = original[index]; + index++; + } + } + return arrs; + } + + public int numOfPairs(String[] nums, String target) { + int result = 0; + for (int i = 0; i < nums.length; i++) { + for (int j = 0; j < nums.length; j++) { + if (i != j && (nums[i] + nums[j]).equals(target)) { + result++; + } + } + } + return result; + } + + public int maxConsecutiveAnswers(String answerKey, int k) { + List list = new ArrayList<>(); + int index = answerKey.indexOf("T"); + int count = 0; + for (int i = index; i < answerKey.length(); i++) { + if (answerKey.charAt(i) == 'T') { + count++; + } else { + int fc = 0; + for (int j = i; j < answerKey.length(); j++) { + if (answerKey.charAt(i) == 'F') { + fc++; + if (fc == k) { + + } + } else { + break; + } + } + list.add(new int[]{i, count}); + } + } + return 0; + } + + public int waysToPartition(int[] nums, int k) { + Map> map = new HashMap<>(); + int[] sums = new int[nums.length + 1]; + for (int i = 0; i < nums.length; i++) { + sums[i + 1] = sums[i] + nums[i]; + if (i < nums.length - 1) { + List list = map.getOrDefault(sums[i + 1], new ArrayList<>()); + list.add(i); + map.put(sums[i + 1], list); + } + } + int max = 0; + if (sums[nums.length] % 2 == 0 && map.containsKey(sums[nums.length] / 2)) { + max = Math.max(max, map.get(sums[nums.length] / 2).size()); + } + for (int i = 0; i < nums.length; i++) { + int count = 0; + if ((sums[nums.length] + k - nums[i]) % 2 == 0) { + if (map.containsKey((sums[nums.length] + k - nums[i]) / 2)) { + List list = map.get((sums[nums.length] + k - nums[i]) / 2); + for (int j = 0; j < list.size(); j++) { + if (j < i) { + count++; + } else { + break; + } + } + } + if (map.containsKey(sums[nums.length] - (k - nums[i]) / 2)) { + List list = map.get(sums[nums.length] - (k - nums[i]) / 2); + for (int j = list.size() - 1; j >= 0; j--) { + if (j >= i) { + count++; + } else { + break; + } + } + } + } + max = Math.max(max, count); + } + return max; + } +}