多线程问题(算法高阶、多线程算法)、存在重复元素 II(数组、哈希表)、计数质数(数组、数学)

举报
共饮一杯无 发表于 2023/02/24 10:37:17 2023/02/24
【摘要】 多线程问题(算法高阶、多线程算法)程序中需要开启两个线程(线程1和线程2)线程1固定5秒钟执行一次线程2固定10秒钟执行一次开启程序如何做到线程1执行完成后再执行线程2并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行解答:public class TestThreadJoin { public static void main(String[] args) { ...

多线程问题(算法高阶、多线程算法)

  1. 程序中需要开启两个线程(线程1和线程2)
  2. 线程1固定5秒钟执行一次
  3. 线程2固定10秒钟执行一次
  4. 开启程序如何做到线程1执行完成后再执行线程2并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行

解答:

public class TestThreadJoin {
    public static void main(String[] args) {
        final Object lock = new Object();
        Runnable r1 = () -> {
            while (true) {
                synchronized (lock) {
                    System.out.println("线程1执行。");
                }
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        Runnable r2 = () -> {
            while (true) {
                synchronized (lock) {
                    System.out.println("线程2执行。");
                }
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        new Thread(r1).start();
        new Thread(r2).start();
    }
}

存在重复元素 II(数组、哈希表)

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引_ i_ 和_ j_,使得 nums [i] = nums [j],并且 ij 的差的 绝对值 至多为 k

示例 1:
输入: nums = [1,2,3,1], k = 3 输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1 输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2 输出: false

解答:

public class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        int left = 0;
        int right = -1;
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        while (left < nums.length) {
            if (right + 1 < nums.length && right - left < k) {
                right++;
                if (hashMap.containsKey(nums[right])) {
                    return true;
                } else {
                    hashMap.put(nums[right], 1);
                }
            } else {
                hashMap.put(nums[left], hashMap.get(nums[left]) - 1);
                if (hashMap.get(nums[left]) == 0) {
                    hashMap.remove(nums[left]);
                }
                left++;
            }
        }
        return false;
    }
}

计数质数(数组、数学)

统计所有小于非负整数 _n _的质数的数量。

示例 1:
输入:n = 10 输出:4 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:
输入:n = 0 输出:0
示例 3:
输入:n = 1 输出:0

提示:

  • 0 <= n <= 5 * 106

解答:

class Solution {
    public int countPrimes(int n) {
        int flag = 0;
        if (n > 2)
            flag = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    break;
                }
                if (j == i - 1) {
                    flag++;
                }
            }
        }
        return flag;
    }
}

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位大佬指出。
保持热爱,奔赴下一场山海。🏃🏃🏃

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。