Skip to content

Commit fb7f93e

Browse files
committed
2019-10-12
1 parent 31ac3f2 commit fb7f93e

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package question1128_number_of_equivalent_domino_pairs;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* 排序后判断。
7+
*
8+
* 时间复杂度是O(nlogn),其中n为dominoes数组的长度。空间复杂度是O(1)。
9+
*
10+
* 执行用时:56ms,击败13.41%。消耗内存:56.1MB,击败100.00%。
11+
*/
12+
public class Solution1 {
13+
public int numEquivDominoPairs(int[][] dominoes) {
14+
int n = dominoes.length;
15+
for (int i = 0; i < n; i++) {
16+
if (dominoes[i][0] > dominoes[i][1]) {
17+
int tmp = dominoes[i][0];
18+
dominoes[i][0] = dominoes[i][1];
19+
dominoes[i][1] = tmp;
20+
}
21+
}
22+
Arrays.sort(dominoes, (o1, o2) -> {
23+
if (o1[0] == o2[0]) {
24+
return o1[1] - o2[1];
25+
}
26+
return o1[0] - o2[0];
27+
});
28+
int result = 0;
29+
for (int i = 0; i < n; ) {
30+
int j = i;
31+
while (j + 1 < n && dominoes[i][0] == dominoes[j + 1][0] && dominoes[i][1] == dominoes[j + 1][1]) {
32+
j++;
33+
}
34+
result += ((j - i) * (j - i + 1)) >> 1;
35+
i = j + 1;
36+
}
37+
return result;
38+
}
39+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package question1128_number_of_equivalent_domino_pairs;
2+
3+
/**
4+
* 哈希表。
5+
*
6+
* 时间复杂度是O(n),其中n为dominoes数组的长度。空间复杂度是O(1)。
7+
*
8+
* 执行用时:2ms,击败99.82%。消耗内存:55.1MB,击败100.00%。
9+
*/
10+
public class Solution2 {
11+
public int numEquivDominoPairs(int[][] dominoes) {
12+
int[] map = new int[100];
13+
for (int i = 0; i < dominoes.length; i++) {
14+
int index;
15+
if (dominoes[i][0] <= dominoes[i][1]) {
16+
index = dominoes[i][0] * 10 + dominoes[i][1];
17+
} else {
18+
index = dominoes[i][1] * 10 + dominoes[i][0];
19+
}
20+
map[index]++;
21+
}
22+
int result = 0;
23+
for (int num : map) {
24+
result += (num * (num - 1)) >> 1;
25+
}
26+
return result;
27+
}
28+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package question1154_day_of_the_year;
2+
3+
/**
4+
* 对闰年和非闰年进行分别处理。
5+
*
6+
* 时间复杂度和空间复杂度均是O(1)。
7+
*
8+
* 执行用时:3ms,击败81.38%。消耗内存:34.5MB,击败100.00%。
9+
*/
10+
public class Solution {
11+
int[][] dayOfMonth = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
12+
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
13+
14+
public int dayOfYear(String date) {
15+
String[] inputs = date.split("-");
16+
int year = Integer.parseInt(inputs[0]), month = Integer.parseInt(inputs[1]), day = Integer.parseInt(inputs[2]);
17+
int index = 0, result = 0;
18+
if (isLeapYear(year)) {
19+
index++;
20+
}
21+
for (int i = 1; i < month; i++) {
22+
result += dayOfMonth[index][i - 1];
23+
}
24+
return result + day;
25+
}
26+
27+
private boolean isLeapYear(int year) {
28+
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
29+
return true;
30+
}
31+
return false;
32+
}
33+
}

0 commit comments

Comments
 (0)