2024-11-30:质数的最大距离。用go语言,给定一个整数数组 nums,请找出两个(可以是相同的)质数在该数组中的下标之间的最大距离。 提示: nums的长度在[1,3*10^5]之间。 num

2024-11-30:质数的最大距离。用go语言,给定一个整数数组 nums,请找出两个(可以是相同的)质数在该数组中的下标之间的最大距离。

提示:

nums的长度在[1,3*10^5]之间。

nums的每个元素的值在[1,100]。

输入保证 nums 中至少有一个质数。

输入: nums = [4,2,9,5,3]。

输出: 3。

解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答案是 |4 - 1| = 3。

答案2024-11-30:

chatgpt

题目来自leetcode3115。

大体步骤如下:

1.定义一个函数 maximumPrimeDifference(nums []int) int 用于计算质数的最大距离。其中,根据给定的质数列表 primes 和数组 nums:

  • 创建一个 map primeSet 用于存储质数的出现情况。

  • 遍历 nums 数组,找到第一个质数的下标,并记录在变量 first 中。

  • 再次遍历 nums 数组,找到最后一个质数的下标,并记录在变量 last 中。

  • 返回最后一个质数的下标与第一个质数的下标之间的距离。

2.在主函数 main 中,定义一个示例数组 nums := []int{4, 2, 9, 5, 3}。

3.调用 maximumPrimeDifference(nums) 函数,并输出结果。

总体时间复杂度为 O(n), 其中 n 为数组 nums 的长度。

总体空间复杂度为 O(1),并不随输入规模变化。

Go完整代码如下:

package main

import (
	"fmt"
)

func maximumPrimeDifference(nums []int) int {
	primes := []int{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}
	primeSet := make(map[int]struct{})
	for _, v := range primes {
		primeSet[v] = struct{}{}
	}
	n := len(nums)
	first := 0
	for i := 0; i < n; i++ {
		if _, ok := primeSet[nums[i]]; ok {
			first = i
			break
		}
	}
	last := 0
	for i := n - 1; i >= 0; i-- {
		if _, ok := primeSet[nums[i]]; ok {
			last = i
			break
		}
	}
	return last - first
}

func main() {
	nums := []int{4, 2, 9, 5, 3}
	fmt.Println(maximumPrimeDifference(nums))
}

在这里插入图片描述

Rust完整代码如下:

fn maximum_prime_difference(nums: Vec<i32>) -> i32 {
    let primes = [
        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,
    ];

    let prime_set: std::collections::HashSet<i32> = primes.iter().cloned().collect();
    let n = nums.len();
    
    let mut first = -1;
    for i in 0..n {
        if prime_set.contains(&nums[i]) {
            first = i as i32;
            break;
        }
    }

    let mut last = -1;
    for i in (0..n).rev() {
        if prime_set.contains(&nums[i]) {
            last = i as i32;
            break;
        }
    }

    if first == -1 || last == -1 { 
        return 0; // 如果不存在质数
    }

    last - first
}

fn main() {
    let nums = vec![4, 2, 9, 5, 3];
    println!("{}", maximum_prime_difference(nums));
}

在这里插入图片描述

posted @ 2024-11-30 09:37  福大大架构师每日一题  阅读(5)  评论(0编辑  收藏  举报