周赛309
This commit is contained in:
parent
98b250dda9
commit
845d582944
87
src/main/java/contest/y2022/m9/Week309.java
Normal file
87
src/main/java/contest/y2022/m9/Week309.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package contest.y2022.m9;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hyy
|
||||||
|
* @Classname Week309
|
||||||
|
* @Description TODO
|
||||||
|
* @Date 2022/9/4 10:28
|
||||||
|
*/
|
||||||
|
public class Week309 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Week309 solution = new Week309();
|
||||||
|
solution.numberOfWays(989, 1000, 99);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int longestNiceSubarray(int[] nums) {
|
||||||
|
int left = 0;
|
||||||
|
int num = 0;
|
||||||
|
int res = 1;
|
||||||
|
for (int i = 0; i < nums.length; i++) {
|
||||||
|
while (left < i && (num & nums[i]) > 0) {
|
||||||
|
num -= nums[left];
|
||||||
|
left += 1;
|
||||||
|
}
|
||||||
|
num |= nums[i];
|
||||||
|
res = Math.max(res, i - left + 1);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int numberOfWays(int startPos, int endPos, int k) {
|
||||||
|
int num = k - Math.abs(endPos - startPos);
|
||||||
|
if (num < 0 || num % 2 == 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (num == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
long ret = 0;
|
||||||
|
if (map.containsKey(endPos - 1)) {
|
||||||
|
Map<Integer, Integer> tmp = map.get(endPos - 1);
|
||||||
|
if (tmp.containsKey(k - 1)) {
|
||||||
|
ret += tmp.get(k - 1);
|
||||||
|
} else {
|
||||||
|
ret += numberOfWays(startPos, endPos - 1, k - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret += numberOfWays(startPos, endPos - 1, k - 1);
|
||||||
|
}
|
||||||
|
if (map.containsKey(endPos + 1)) {
|
||||||
|
Map<Integer, Integer> tmp = map.get(endPos + 1);
|
||||||
|
if (tmp.containsKey(k - 1)) {
|
||||||
|
ret += tmp.get(k - 1);
|
||||||
|
} else {
|
||||||
|
ret += numberOfWays(startPos, endPos + 1, k - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret += numberOfWays(startPos, endPos + 1, k - 1);
|
||||||
|
}
|
||||||
|
Map<Integer, Integer> tmp = map.getOrDefault(endPos, new HashMap<>());
|
||||||
|
tmp.put(k, (int) ret);
|
||||||
|
map.put(endPos, tmp);
|
||||||
|
return map.get(endPos).get(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Integer, Map<Integer, Integer>> map = new HashMap<>();
|
||||||
|
|
||||||
|
public boolean checkDistances(String s, int[] distance) {
|
||||||
|
int[] arr = new int[26];
|
||||||
|
Arrays.fill(arr, -1);
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
char ch = s.charAt(i);
|
||||||
|
int index = ch - 'a';
|
||||||
|
if (arr[index] > -1) {
|
||||||
|
if (distance[index] != i - arr[index] - 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
arr[index] = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user