LeetCode刷题记---1005/747/1047


寒假继续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]);

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值