Skip to content

Commit c189c71

Browse files
committed
update
1 parent 7bd4c1b commit c189c71

7 files changed

+284
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// AC: 280 ms
2+
// Memory: 1500 KB
3+
// Sort & place duplicate elements behind.
4+
// T:O(sum(ni * logni)), S:O(max(ni))
5+
//
6+
import java.util.Arrays;
7+
import java.util.Scanner;
8+
9+
public class Codeforces_1497A_Meximization {
10+
public static void main(String[] args) {
11+
Scanner sc = new Scanner(System.in);
12+
int t = sc.nextInt();
13+
for (int i = 0; i < t; i++) {
14+
int n = sc.nextInt();
15+
Integer[] arr = new Integer[n];
16+
for (int j = 0; j < n; j++) {
17+
int a = sc.nextInt();
18+
arr[j] = a;
19+
}
20+
Arrays.sort(arr);
21+
StringBuilder ret = new StringBuilder(), dup = new StringBuilder();
22+
int prev = -1;
23+
for (int j = 0; j < n; j++) {
24+
if (arr[j] == prev) {
25+
dup.append(arr[j]);
26+
if (j != n - 1) {
27+
dup.append(" ");
28+
}
29+
} else {
30+
ret.append(arr[j]);
31+
if (j != n - 1) {
32+
ret.append(" ");
33+
}
34+
prev = arr[j];
35+
}
36+
}
37+
if (!dup.toString().isEmpty()) {
38+
ret.append(" ");
39+
ret.append(dup);
40+
}
41+
System.out.println(ret);
42+
}
43+
}
44+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Runtime 22 ms Beats 96.11% of users with Java
2+
// Memory 44.82 MB Beats 93.23% of users with Java
3+
// Sort & hashmap.
4+
// T:O(nlogn), S:O(1) ~ O(n)
5+
//
6+
class Solution {
7+
public boolean isNStraightHand(int[] hand, int groupSize) {
8+
if (groupSize == 1) {
9+
return true;
10+
}
11+
int len = hand.length;
12+
if (len % groupSize != 0) {
13+
return false;
14+
}
15+
Arrays.sort(hand);
16+
HashMap<Integer, Integer> record = new HashMap<>();
17+
record.put(hand[0], 1);
18+
int countSame = 1, maxDup = len / groupSize;
19+
for (int i = 1; i < len; i++) {
20+
if (hand[i] == hand[i - 1]) {
21+
countSame++;
22+
if (countSame > maxDup) {
23+
return false;
24+
}
25+
} else {
26+
countSame = 1;
27+
}
28+
record.merge(hand[i], 1, Integer::sum);
29+
}
30+
for (int elem : hand) {
31+
if (record.getOrDefault(elem, 0) == 0) {
32+
continue;
33+
}
34+
record.merge(elem, -1, Integer::sum);
35+
for (int j = elem + 1; j <= elem + groupSize - 1; j++) {
36+
if (record.getOrDefault(j, 0) == 0) {
37+
return false;
38+
}
39+
record.merge(j, -1, Integer::sum);
40+
}
41+
}
42+
43+
return true;
44+
}
45+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// Solution 1: Brute-force & prefix sum.
2+
// Runtime 14 ms Beats 6.72% of users with Java
3+
// Memory 44.88 MB Beats 5.93% of users with Java
4+
// Hashmap, prefix sum, brute-foce
5+
// T:O(n ^ 2), S:O(n)
6+
//
7+
class Solution {
8+
public ListNode removeZeroSumSublists(ListNode head) {
9+
List<ListNode> nodes = new ArrayList<>();
10+
ListNode headCopy = head;
11+
while (headCopy != null) {
12+
nodes.add(headCopy);
13+
headCopy = headCopy.next;
14+
}
15+
16+
while (true) {
17+
HashMap<Integer, Integer> record = new HashMap<>();
18+
record.put(0, 0);
19+
int count = 0, sum = 0;
20+
boolean changed = false;
21+
for (int i = 0; i < nodes.size(); i++) {
22+
sum += nodes.get(i).val;
23+
count++;
24+
if (record.containsKey(sum)) {
25+
int indexStart = record.get(sum);
26+
nodes.subList(indexStart, count).clear();
27+
changed = true;
28+
break;
29+
}
30+
record.putIfAbsent(sum, count);
31+
}
32+
33+
if (!changed) {
34+
break;
35+
}
36+
}
37+
38+
if (nodes.isEmpty()) {
39+
return null;
40+
}
41+
42+
ListNode ret = nodes.get(0);
43+
for (int i = 0; i < nodes.size() - 1; i++) {
44+
nodes.get(i).next = nodes.get(i + 1);
45+
}
46+
nodes.get(nodes.size() - 1).next = null;
47+
48+
return ret;
49+
}
50+
}
51+
52+
53+
// Solution 2: todo
54+
//
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Runtime 38 ms Beats 99.25% of users with Java
2+
// Memory 57.62 MB Beats 62.44% of users with Java
3+
// Sort & hashmap.
4+
// T:O(nlogn), S:O(1) ~ O(n)
5+
//
6+
class Solution {
7+
public boolean isPossibleDivide(int[] nums, int k) {
8+
if (k == 1) {
9+
return true;
10+
}
11+
int len = nums.length;
12+
if (len % k != 0) {
13+
return false;
14+
}
15+
Arrays.sort(nums);
16+
HashMap<Integer, Integer> record = new HashMap<>();
17+
record.put(nums[0], 1);
18+
int countSame = 1, maxDup = len / k;
19+
for (int i = 1; i < len; i++) {
20+
if (nums[i] == nums[i - 1]) {
21+
countSame++;
22+
if (countSame > maxDup) {
23+
return false;
24+
}
25+
} else {
26+
countSame = 1;
27+
}
28+
record.merge(nums[i], 1, Integer::sum);
29+
}
30+
for (int elem : nums) {
31+
if (record.getOrDefault(elem, 0) == 0) {
32+
continue;
33+
}
34+
record.merge(elem, -1, Integer::sum);
35+
for (int j = elem + 1; j <= elem + k - 1; j++) {
36+
if (record.getOrDefault(j, 0) == 0) {
37+
return false;
38+
}
39+
record.merge(j, -1, Integer::sum);
40+
}
41+
}
42+
43+
return true;
44+
}
45+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Runtime 3 ms Beats 20.13% of users with Java
2+
// Memory 41.17 MB Beats 70.44% of users with Java
3+
// Implementation.
4+
// T:O(n), S:O(n)
5+
//
6+
class Solution {
7+
public int numSteps(String s) {
8+
int len = s.length(), ret = 0;
9+
List<Integer> digits = new ArrayList<>(len);
10+
for (char c : s.toCharArray()) {
11+
digits.add(c - '0');
12+
}
13+
for (int i = len - 1; i >= 0; i--) {
14+
if (digits.get(i) == 0) {
15+
ret++;
16+
} else {
17+
if (i == 0) {
18+
continue;
19+
}
20+
int j = i;
21+
while (j - 1 >= 0 && digits.get(j - 1) == 1) {
22+
j--;
23+
}
24+
for (int k = j; k <= i; k++) {
25+
digits.set(k, 0);
26+
}
27+
if (j > 0) {
28+
digits.set(j - 1, 1);
29+
}
30+
ret++;
31+
i++;
32+
}
33+
}
34+
35+
return ret;
36+
}
37+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Runtime 1 ms Beats 100.00% of users with Java
2+
// Memory 41.94 MB Beats 100.00% of users with Java
3+
// .
4+
// T:O(n), S:O(1)
5+
//
6+
class Solution {
7+
public int minimumChairs(String s) {
8+
int cur = 0, ret = 0;
9+
for (char c : s.toCharArray()) {
10+
if (c == 'E') {
11+
cur++;
12+
ret = Math.max(ret, cur);
13+
} else {
14+
cur--;
15+
}
16+
}
17+
18+
return ret;
19+
}
20+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Runtime 61 ms Beats 100.00% of users with Java
2+
// Memory 99.61 MB Beats 100.00% of users with Java
3+
// Sort And get all dis-joint continous segment.
4+
// T:O(nlogn), S:(n)
5+
//
6+
class Solution {
7+
public int countDays(int days, int[][] meetings) {
8+
Arrays.sort(meetings, (a, b) -> a[0] != b[0] ? (a[0] - b[0]) : (a[1] != b[1] ? (a[1] - b[1]) : 0));
9+
List<List<Integer>> segment = new ArrayList<>();
10+
for (int[] meeting : meetings) {
11+
if (segment.isEmpty()) {
12+
List<Integer> list = new ArrayList<>();
13+
list.add(meeting[0]);
14+
list.add(meeting[1]);
15+
segment.add(list);
16+
} else {
17+
List<Integer> list = segment.get(segment.size() - 1);
18+
if (meeting[0] == list.get(1)) {
19+
list.set(1, meeting[1]);
20+
} else if (meeting[0] < list.get(1)) {
21+
if (meeting[1] > list.get(1)) {
22+
list.set(1, meeting[1]);
23+
}
24+
} else {
25+
List<Integer> list2 = new ArrayList<>();
26+
list2.add(meeting[0]);
27+
list2.add(meeting[1]);
28+
segment.add(list2);
29+
}
30+
}
31+
}
32+
int count = 0;
33+
for (List<Integer> segmentItem : segment) {
34+
count += segmentItem.get(1) - segmentItem.get(0) + 1;
35+
}
36+
37+
return days - count;
38+
}
39+
}

0 commit comments

Comments
 (0)