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

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

时间:2024-11-30 09:45:37浏览次数:4  
标签:last nums int 质数 数组 first

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

在这里插入图片描述

标签:last,nums,int,质数,数组,first
From: https://www.cnblogs.com/moonfdd/p/18578060

相关文章

  • 写一个方法从数组中随机抽取N个不重复的元素
    /***从数组中随机抽取N个不重复的元素*@param{Array}arr原数组*@param{number}n要抽取的元素个数*@returns{Array}包含n个不重复元素的新数组,如果n大于数组长度,返回打乱顺序的原数组*/functiongetRandomElements(arr,n){if(n>=arr.length){......
  • 遍历数组和对象的方法都有哪些?
    在前端开发中,遍历数组和对象的方法有很多,以下是常用的几种,并分别针对数组和对象进行说明:数组遍历:for循环:最基本的循环方式,可以完全控制循环的起始、结束和步长。constarr=[1,2,3,4,5];for(leti=0;i<arr.length;i++){console.log(arr[i]);}for.......
  • C语言实现数组堆并解决TopK问题
    还是先定义结构体typedefintHPDataType;typedefstruct{HPDataType*array;intsize;intcapacity;}HP;voidHeapInit(HP*php){assert(php);php->array=NULL;php->capacity=php->size=0;}首先是它的初始化。voidHeapDestroy......
  • MarsCode青训营序章Day1|稀土掘金-1.找单独的数、47.完美偶数计数、3.数组字符格式化
    稀土掘金-1.找单独的数(1.找单独的数)题目分析:n个同学每人持有1张写有数字的卡片,除了一个数字之外,其他每个数字均出现了刚好2次,要求设计时间复杂度为O(n)的算法从cards数组中查找该单独的数。题目重点:已知除单独的数外,其余的都是成对的数,则不存在重复次数超过2的数。需要使时......
  • JavaScript 数组方法详解与实践
    #JavaScript  #前端 在JavaScript中,数组是一个非常强大的数据结构,提供了多种内置方法来处理和操作数据。本文将详细介绍几种常用的数组方法:push(), unshift(), splice(), filter(), find(), forEach(), reverse(), map()。我们将逐一探讨它们的使用方法、测试用例......
  • 树状数组
    前缀和之树状数组树状数组(FenwickTree)是一种用于高效处理区间查询与修改的重要工具。它可以在(O(logn))的时间复杂度内完成单点更新和前缀区间求和的操作。一、树状数组的基本思想树状数组通过一个辅助数组(c[i])实现,将原数组的信息以一种特殊的方式存储,使得查询和更新都......
  • 【每日一题】209. 长度最小的子数组
    给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例1:输入:target=7,nums=[2,3,1,2,4,3]......
  • 力扣每日一题 单调数组对的数目(dp)
     题目困难 动态规划给你一个长度为 n 的 正 整数数组 nums 。如果两个 非负 整数数组 (arr1,arr2) 满足以下条件,我们称它们是 单调 数组对:两个数组的长度都是 n 。arr1 是单调 非递减 的,换句话说 arr1[0]<=arr1[1]<=...<=arr1[n-1] 。arr2......
  • 【每日一题】3251. 单调数组对的数目 II
      给你一个长度为 n 的 正 整数数组 nums 。如果两个 非负 整数数组 (arr1,arr2) 满足以下条件,我们称它们是 单调 数组对:两个数组的长度都是 n 。arr1 是单调 非递减 的,换句话说 arr1[0]<=arr1[1]<=...<=arr1[n-1] 。arr2 是单调 非递增 ......
  • C语言 - 指针,数组
    指针指针入门创建变量intage=10;创建指针,指向变量指针类型*指针变量=&变量int*p=&age;当有了指针之后,就可以通过指针操作他指向的数据了通过指针获取指向的位置的数据,在指针前面加一个*为解引用指针前加*修改,改的是指针指向的位置的值指针的作用:游......