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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程问题(算法高阶多线程算法)存在重复元素 II(数组哈希表)计数质数(数组数学)相关的知识,希望对你有一定的参考价值。

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

  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;
    

以上是关于多线程问题(算法高阶多线程算法)存在重复元素 II(数组哈希表)计数质数(数组数学)的主要内容,如果未能解决你的问题,请参考以下文章

java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列

小Y学算法⚡️每日LeetCode打卡⚡️——48.存在重复元素 II

leetcode算法219.存在重复元素 II

Java多线程系列---“JUC原子类”01之 原子类的实现(CAS算法)

多线程合并排序算法

怎么处理JAVA多线程死锁问题?