多线程问题(算法高阶多线程算法)存在重复元素 II(数组哈希表)计数质数(数组数学)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程问题(算法高阶多线程算法)存在重复元素 II(数组哈希表)计数质数(数组数学)相关的知识,希望对你有一定的参考价值。
多线程问题(算法高阶、多线程算法)
- 程序中需要开启两个线程(线程1和线程2)
- 线程1固定5秒钟执行一次
- 线程2固定10秒钟执行一次
- 开启程序如何做到线程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],并且 i 和 j 的差的 绝对值 至多为 _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