Skip to content

Commit 42c3434

Browse files
add 1152
1 parent 4b35c2d commit 42c3434

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ _If you like this project, please leave me a star._ ★
225225
|1161|[Maximum Level Sum of a Binary Tree](https://leetcode.com/problems/maximum-level-sum-of-a-binary-tree/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1161.java) | |Medium|Graph|
226226
|1160|[Find Words That Can Be Formed by Characters](https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1160.java)| |Easy||
227227
|1154|[Day of the Year](https://leetcode.com/problems/day-of-the-year/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1154.java) | |Easy||
228+
|1152|[Analyze User Website Visit Pattern](https://leetcode.com/problems/analyze-user-website-visit-pattern/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1152.java) | |Medium|HashTable, Sort, Array|
228229
|1150|[Check If a Number Is Majority Element in a Sorted Array](https://leetcode.com/problems/check-if-a-number-is-majority-element-in-a-sorted-array/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1150.java)|[:tv:](https://youtu.be/-t2cdVs9cKk) |Easy||
229230
|1146|[Snapshot Array](https://leetcode.com/problems/snapshot-array/)|[Javascript](./javascript/_1146.js)| | Easy ||
230231
|1138|[Alphabet Board Path](https://leetcode.com/problems/alphabet-board-path/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_1138.java)| | Medium |HashTable, String|
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.Set;
9+
import java.util.TreeMap;
10+
11+
public class _1152 {
12+
public static class Solution1 {
13+
public List<String> mostVisitedPattern(String[] username, int[] timestamp, String[] website) {
14+
Map<String, TreeMap<Integer, String>> userToSiteMap = new HashMap<>();
15+
for (int i = 0; i < username.length; i++) {
16+
if (!userToSiteMap.containsKey(username[i])) {
17+
userToSiteMap.put(username[i], new TreeMap<>());
18+
}
19+
TreeMap<Integer, String> timeToSiteMap = userToSiteMap.get(username[i]);
20+
timeToSiteMap.put(timestamp[i], website[i]);
21+
userToSiteMap.put(username[i], timeToSiteMap);
22+
}
23+
Map<String, Integer> sequenceCountMap = new HashMap<>();
24+
for (String user : userToSiteMap.keySet()) {
25+
TreeMap<Integer, String> timeToSiteMap = userToSiteMap.get(user);
26+
if (timeToSiteMap.size() < 3) {
27+
continue;
28+
} else {
29+
List<Integer> times = new ArrayList<>();
30+
for (int time : timeToSiteMap.keySet()) {
31+
times.add(time);
32+
}
33+
List<String> allSequences = formAllSequences(times, timeToSiteMap);
34+
Set<String> encounteredSequence = new HashSet<>();
35+
for (String sequence : allSequences) {
36+
if (encounteredSequence.add(sequence)) {
37+
sequenceCountMap.put(sequence, sequenceCountMap.getOrDefault(sequence, 0) + 1);
38+
}
39+
}
40+
}
41+
}
42+
List<String> mostVisitedPattern = new ArrayList<>();
43+
int count = 0;
44+
String result = null;
45+
for (String sequence : sequenceCountMap.keySet()) {
46+
if (sequenceCountMap.get(sequence) > count) {
47+
result = sequence;
48+
count = sequenceCountMap.get(sequence);
49+
} else if (count == sequenceCountMap.get(sequence)) {
50+
if (sequence.compareTo(result) < 0) {
51+
result = sequence;
52+
}
53+
}
54+
}
55+
for (String site : result.split("->")) {
56+
mostVisitedPattern.add(site);
57+
}
58+
return mostVisitedPattern;
59+
}
60+
61+
private List<String> formAllSequences(List<Integer> times, TreeMap<Integer, String> timeToSiteMap) {
62+
List<String> result = new ArrayList<>();
63+
for (int i = 0; i < times.size() - 2; i++) {
64+
for (int j = i + 1; j < times.size() - 1; j++) {
65+
for (int k = j + 1; k < times.size(); k++) {
66+
result.add(timeToSiteMap.get(times.get(i)) + "->" + timeToSiteMap.get(times.get(j)) + "->" + timeToSiteMap.get(times.get(k)));
67+
}
68+
}
69+
}
70+
return result;
71+
}
72+
}
73+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._1152;
4+
import org.junit.BeforeClass;
5+
import org.junit.Test;
6+
7+
import java.util.Arrays;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class _1152Test {
12+
private static _1152.Solution1 solution1;
13+
14+
@BeforeClass
15+
public static void setup() {
16+
solution1 = new _1152.Solution1();
17+
}
18+
19+
@Test
20+
public void test1() {
21+
assertEquals(Arrays.asList("home", "about", "career"), solution1.mostVisitedPattern(new String[]{"joe", "joe", "joe", "james", "james", "james", "james", "mary", "mary", "mary"}, new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, new String[]{"home", "about", "career", "home", "cart", "maps", "home", "home", "about", "career"}));
22+
}
23+
24+
@Test
25+
public void test2() {
26+
assertEquals(Arrays.asList("oz", "mryxsjc", "wlarkzzqht"), solution1.mostVisitedPattern(new String[]{"zkiikgv", "zkiikgv", "zkiikgv", "zkiikgv"}, new int[]{436363475, 710406388, 386655081, 797150921}, new String[]{"wnaaxbfhxp", "mryxsjc", "oz", "wlarkzzqht"}));
27+
}
28+
29+
@Test
30+
public void test3() {
31+
assertEquals(Arrays.asList("hibympufi", "hibympufi", "yljmntrclw"), solution1.mostVisitedPattern(new String[]{"h", "eiy", "cq", "h", "cq", "txldsscx", "cq", "txldsscx", "h", "cq", "cq"}, new int[]{527896567, 334462937, 517687281, 134127993, 859112386, 159548699, 51100299, 444082139, 926837079, 317455832, 411747930}, new String[]{"hibympufi", "hibympufi", "hibympufi", "hibympufi", "hibympufi", "hibympufi", "hibympufi", "hibympufi", "yljmntrclw", "hibympufi", "yljmntrclw"}));
32+
}
33+
}

0 commit comments

Comments
 (0)