From d302957e6ab8b1f5bae9b7265e0b6e821e427030 Mon Sep 17 00:00:00 2001 From: "huangge1199@hotmail.com" Date: Sun, 25 Jul 2021 00:05:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=2057=20=E5=9C=BA=E5=8F=8C=E5=91=A8?= =?UTF-8?q?=E8=B5=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/code/leet/doubleWeek/SolutionD57.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/main/java/com/code/leet/doubleWeek/SolutionD57.java diff --git a/src/main/java/com/code/leet/doubleWeek/SolutionD57.java b/src/main/java/com/code/leet/doubleWeek/SolutionD57.java new file mode 100644 index 0000000..9c414cf --- /dev/null +++ b/src/main/java/com/code/leet/doubleWeek/SolutionD57.java @@ -0,0 +1,111 @@ +package com.code.leet.doubleWeek; + +import java.util.*; + +public class SolutionD57 { + public static void main(String[] args) { + SolutionD57 solution = new SolutionD57(); +// System.out.println(solution.smallestChair(new int[][]{{33889, 98676}, {80071, 89737}, {44118, 52565}, {52992, 84310}, {78492, 88209}, +// {21695, 67063}, {84622, 95452}, {98048, 98856}, {98411, 99433}, {55333, 56548}, {65375, 88566}, {55011, 62821}, +// {48548, 48656}, {87396, 94825}, {55273, 81868}, {75629, 91467}}, 6)); + + solution.splitPainting(new int[][]{{1, 7, 9}, {6, 8, 15}, {8, 10, 7}}); + } + + public boolean areOccurrencesEqual(String s) { + int[] arr = new int[26]; + for (char ch : s.toCharArray()) { + arr[ch - 'a']++; + } + int num = arr[s.charAt(0) - 'a']; + for (int j : arr) { + if (j > 0 && j != num) { + return false; + } + } + return true; + } + + public int smallestChair(int[][] times, int targetFriend) { + int[] target = times[targetFriend]; + Arrays.sort(times, Comparator.comparingInt(a -> a[0])); + int size = 0; + for (int i = 0; i < times.length; i++) { + if (times[i][0] == target[0]) { + size = i; + break; + } + } + int[] arr = new int[size + 1]; + List use = new ArrayList<>(); + int index = 0; + int start = times[0][0]; + for (int[] time : times) { + for (int i = 0; i < index; i++) { + if (arr[i] > 0) { + arr[i] -= time[0] - start; + if (arr[i] <= 0) { + use.add(i); + Collections.sort(use); + } + } + } + start = time[0]; + if (time[0] == target[0]) { + return use.size() > 0 ? use.get(0) : index; + } + if (use.size() > 0) { + arr[use.get(0)] = time[1] - time[0]; + use.remove(0); + } else { + arr[index] = time[1] - time[0]; + index++; + } + } + return 0; + } + + public List> splitPainting(int[][] segments) { + Arrays.sort(segments, Comparator.comparingInt(a -> a[0])); + int start = segments[0][0]; + Arrays.sort(segments, Comparator.comparingInt(a -> a[1])); + int end = segments[segments.length - 1][1]; + List[] arr = new List[end - start]; + for (int[] segment : segments) { + for (int i = segment[0]; i < segment[1]; i++) { + if (arr[i - start] == null) { + arr[i - start] = new ArrayList<>(); + } + arr[i - start].add(segment[2]); + } + } + List> result = new ArrayList<>(); + int index = 0; + long sum = 0; + for (int i = 0; i < arr[0].size(); i++) { + sum += arr[0].get(i); + } + Long s = (long) start; + for (int i = 0; i < end - start; i++) { + boolean bl = false; + long temp = 0; + for (int j = 0; j < arr[i].size(); j++) { + if (arr[i].size() == arr[index].size()) { + if (!bl && !arr[i].get(j).equals(arr[index].get(j))) { + bl = true; + } + }else{ + bl = true; + } + temp += arr[i].get(j); + } + if (bl) { + result.add(Arrays.asList(s + index, s + i, sum)); + index = i; + sum = temp; + } + } + result.add(Arrays.asList(s + index, (long) end, sum)); + return result; + } +}