題目:
給你一個整數數組 nums。
返回兩個(不一定不同的)質數在 nums 中 下標 的 最大距離。
示例 1:
輸入: nums = [4,2,9,5,3]
輸出: 3
解釋: nums[1]、nums[3] 和 nums[4] 是質數。因此答案是 |4 - 1| = 3。
示例 2:
輸入: nums = [4,8,2,8]
輸出: 0
解釋: nums[2] 是質數。因為只有一個質數,所以答案是 |2 - 2| = 0。
提示:
1 <= nums.length <= 3 * 105
1 <= nums[i] <= 100
輸入保證 nums 中至少有一個質數。
思路:
打表,將100以內的質數先窮舉出來,然后用一個tmp記錄第一個質數的下標,后面每遇到一個質數就去更新ans
代碼:
class Solution {// 打表,將100以內的質數先窮舉出來// 然后用一個tmp記錄第一個質數的下標,后面每遇到一個質數就去更新anspublic int maximumPrimeDifference(int[] nums) {Set<Integer> primes = new HashSet<>(Arrays.asList(2, 3, 5, 7, 11,13, 17, 19, 23, 29,31, 37, 41, 43, 47,53, 59, 61, 67, 71,73, 79, 83, 89, 97));int n = nums.length;int tmp = -1, ans = 0;for (int i = 0; i < n; ++i) {if (primes.contains(nums[i])) {if (tmp != -1) {ans = Math.max(ans, i - tmp);} else {tmp = i;}}}return ans;}
}