寒假继续leetcode的刷题计划
1005.K次去饭后最大化的数组和
思路:使用优先队列存储数组值,然后进行k次操作,每次将优先队列的头元素取反后再次加入优先队列(也就是每次将数组的最小值取反),最后遍历优先队列每个值获得总和即可。
代码:
package LeetCode.Code2022.January;
import java.util.PriorityQueue;
public class Solution1005 {
public int largestSumAfterKNegations(int[] nums, int k) {
int ans = 0;
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
for (int i = 0; i < nums.length; i++) {
priorityQueue.add(nums[i]);
}
for (int i = 0; i < k; i++) {
int elem = priorityQueue.poll();
elem = -1 * elem;
priorityQueue.add(elem);
}
while (!priorityQueue.isEmpty()) {
ans += priorityQueue.poll();
}
return ans;
}
}
747.至少是其他数字两倍的最大数
解题思路: 先遍历一遍获得数组中最大的那个数的下标,然后再遍历一遍数组,判断每个数的两倍是否小于等于最大的数,如果不是则直接返回false。
代码:
package LeetCode.Code2022.January;
public class Solution747 {
public int dominantIndex(int[] nums) {
if (nums.length < 2) {
return 0;
}
int maxNum = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] > nums[maxNum]) {
maxNum = i;
}
}
for (int num : nums) {
if (num * 2 > nums[maxNum] && num != nums[maxNum]) {
return -1;
}
}
return maxNum;
}
}
1047.删除字符串中的所有相邻重复项
解题思路:创建一个stringbuilder(ans),遍历字符串s,若ans不为空且ans最后一位与当前遍历到的s的字符相同则将该字符从ans中删除,反之则将该字符加入到ans,最后返回ans.toString即可。
代码:
package LeetCode.Code2022.January;
public class Solution1047 {
public String removeDuplicates(String s) {
StringBuilder ans = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (ans.length() > 0 && ans.charAt(ans.length() - 1) == s.charAt(i)) {
ans.deleteCharAt(ans.length() - 1);
continue;
}
ans.append(s.charAt(i));
}
return ans.toString();
}
}
1078.Bigram 分词
解题思路:将text按照空格进行分割然后进行遍历,当当前遍历到的字符串匹配first时,下一个字符串存在且匹配second时,将下一个字符串加入答案,最后返回答案即可
代码:
package LeetCode.Code2022.January;
import java.util.ArrayList;
import java.util.List;
public class Solution1078 {
public String[] findOcurrences(String text, String first, String second) {
List<String> ans = new ArrayList<>();
String[] words = text.split(" ");
for (int i = 0; i < words.length; i++) {
if (words[i].equals(first)) {
if (i + 1 < words.length && words[i + 1].equals(second)) {
if (i + 2 < words.length) {
ans.add(words[i + 2]);
}
}
}
}
return ans.toArray(new String[0]);
}
}