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

举报
福大大架构师每日一题 发表于 2024/11/30 09:33:54 2024/11/30
【摘要】 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] 是质数。因...

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));
}

在这里插入图片描述

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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