网址链接
文章目录
- leetcode 第 291 场周赛
- 题目列表
- 移除指定数字得到的最大结果 3
- 必须拿起的最小连续卡牌数 4
- 含最多 K 个可整除元素的子数组 5
- 字符串的总引力
题目列表
- 移除指定数字得到的最大结果 3
第一种 纯暴力,加入集合排序
class Solution {
public String removeDigit(String number, char digit) {
List<String> list = new ArrayList<>();
for(int i = 0; i < number.length(); i++){
if(number.charAt(i) == digit){
list.add(number.substring(0,i) + number.substring(i + 1,number.length())); // 去掉一样的字符
}
}
Collections.sort(list); //还能这样排序呀!
return list.get(list.size() -1);
}
}
第二种 贪心
从前往后遍历,如果找到了数字的下标,把他放进集合中,如果数字比下一个字符比他大,那直接退出循环,这就是我们要找的数字下标。
集合中的最后一个数字就是应该删除的目标字符的下标。
class Solution {
public String removeDigit(String number, char digit) {
List<Integer> list = new ArrayList<>();
char[] c = number.toCharArray();
int i = 0;
for(i = 0; i < c.length; i++){
if(c[i] == digit){
list.add(i);
if(i + 1 < c.length && c[i + 1] > c[i]){
break;
}
}
}
int x = list.get(list.size() - 1);
return (number.substring(0, x) + number.substring(x + 1, c.length));
}
}
- 必须拿起的最小连续卡牌数 4
遍历卡牌,将卡牌和下标存入Map集合,遍历过程中,判断卡牌是否已经存在在Map集合中,如果存在更新answer。
class Solution {
public int minimumCardPickup(int[] cards) {
Map<Integer, Integer> hashmap = new HashMap<>();
int answer = Integer.MAX_VALUE;
for(int i = 0; i < cards.length; i++){
if(hashmap.containsKey(cards[i])){
answer = Math.min(answer, i - hashmap.get(cards[i]));
}
hashmap.put(cards[i], i);
}
if(answer == Integer.MAX_VALUE){
return -1;
}
return answer + 1;
}
}
- 含最多 K 个可整除元素的子数组 5
- 字符串的总引力
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)