LeetCode_单周赛_327
  KBKqjQYVuqu2 2023年11月01日 79 0

6283. 正整数和负整数的最大计数

在这里插入图片描述

代码

直接遍历统计即可

class Solution {
    public int maximumCount(int[] nums) {
        int a = 0, b = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > 0) a++;
            else if (nums[i] < 0) b++;
        }
        
        return Math.max(a, b);
    }
}

6285. 执行 K 次操作后的最大分数

在这里插入图片描述

代码

用最大堆即可
ceil是上取整,操作数和返回值都是 double,需要强转,可能会出现浮点错误,所以使用整数运算规避。
ceil(a / b) = (a + b - 1) / b

class Solution {
    public long maxKelements(int[] nums, int k) {
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        int n = nums.length;
        for (int i = 0; i < n; i++) pq.add(nums[i]);
        long ans = 0;
        while (k-- > 0) {
            int t = pq.peek();
            pq.poll();
            ans += t;
            // int q = (int) Math.ceil(t / 3.0);
            int q = (t + 2) / 3;
            pq.add(q);
        }
        
        return ans;
    }
}

6284. 使字符串总不同字符的数目相等

在这里插入图片描述

代码

比赛的时候看错题了,想错了,以为暴力模拟是 1e5 x 1e5,时间不够
其实只模拟 26 个字母即可,复杂度是 26 x 26
先求出来各自不同字母的数量,还有字母映射到数组中
遍历两个哈希数组,交换字母判断即可

  1. 如果当前不存在该字母,跳过此次循环
  2. 如果两个字符串有相同字母,并且 不同字母数相同,返回 true
  3. 交换两个字符,判断两字符串不同字母个数是否相同即可
class Solution {
    public boolean isItPossible(String s1, String s2) {
        int[] a = new int[26], b = new int[26];
        int x = 0, y = 0;
        for (int i = 0; i < s1.length(); i++) {
            int t = s1.charAt(i) - 'a';
            a[t]++;
            if (a[t] == 1) x++;
        }
        for (int i = 0; i < s2.length(); i++) {
            int t = s2.charAt(i) - 'a';
            b[t]++;
            if (b[t] == 1) y++;
        } 
        // System.out.println(x + " " + y + " " + get_count(a) + " " + get_count(b));
        for (int i = 0; i < 26; i++) {
            if (a[i] == 0) continue;
            for (int j = 0; j < 26; j++) {
                if (b[j] == 0) continue;
                if (i == j) if (x == y) return true;
                    a[i]--;
                    a[j]++;
                    b[i]++;
                    b[j]--;
                    if (get_count(a) == get_count(b)) return true;
                    a[i]++;
                    a[j]--;
                    b[i]--;
                    b[j]++;
            }
        }

        return false;
    }

    private int get_count(int[] a) {
        int ans = 0;
        for (int i = 0; i < 26; i++) {
            if (a[i] > 0) ans++;
        }
        return ans;
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jTMfQq5cr55P   2024年05月17日   44   0   0 算法与数据结构
  jTMfQq5cr55P   2024年05月17日   40   0   0 算法与数据结构
KBKqjQYVuqu2
作者其他文章 更多