3115.力扣每日一题7/2 Java

  • 博客主页:音符犹如代码
  • 系列专栏:算法练习
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

目录

思路

解题方法

时间复杂度

空间复杂度

Code

总结


思路

这道题的解题思路是首先理解题目要求:在给定的整数数组中找到任意两个质数之间的最大距离。为了找到这个最大距离,我们需要遍历数组,同时跟踪遇到的最小质数和最大质数的位置(即下标)。当我们遍历数组时,对于每个元素,我们使用一个辅助函数来判断它是否是质数。如果是质数,我们就更新最小质数和最大质数的位置(如果还没有找到最小质数,就将其设置为当前质数的位置;对于最大质数的位置,我们总是更新为当前质数的位置,因为我们想要找到的是任意两个质数之间的最大距离)。最后,我们返回最大质数和最小质数位置之间的差值作为结果。

方法

  1. 初始化:设置两个变量minPrimeIndexmaxPrimeIndex为-1,用于跟踪最小质数和最大质数的位置。

  2. 遍历数组:使用循环遍历给定的整数数组。

  3. 质数判断:对于数组中的每个元素,使用辅助函数isPrime来判断它是否是质数。

  4. 更新位置

    • 如果当前元素是质数,并且还没有找到最小质数(即minPrimeIndex为-1),则更新minPrimeIndex为当前元素的位置。
    • 无论是否已经找到最小质数,都更新maxPrimeIndex为当前质数的位置,因为我们想要跟踪遇到过的最大质数的位置。
  5. 返回结果:遍历完数组后,检查minPrimeIndexmaxPrimeIndex的值。如果它们相等(即没有找到质数),则返回0;否则,返回maxPrimeIndex - minPrimeIndex作为结果。

时间复杂度

时间复杂度主要取决于两个因素:遍历数组和质数判断。

  • 遍历数组是线性的,即O(n),其中n是数组的长度。
  • 质数判断的时间复杂度在最坏情况下是O(sqrt(m)),其中m是当前要判断的数。但是,由于我们只对数组中的每个元素进行一次质数判断,并且数组的长度是有限的,因此我们可以将质数判断的总体时间复杂度视为与数组长度n成线性关系(尽管实际上是一个更复杂的函数,但在这里我们可以将其简化为与n相关的函数)。

空间复杂度

空间复杂度是O(1),因为我们只使用了几个变量(minPrimeIndexmaxPrimeIndex以及isPrime函数中的几个循环变量)来存储状态,这些变量的数量不随输入数组的大小而变化。我们没有使用任何与输入数组大小成正比的额外空间来存储数据。

Code

class Solution {  
    public int maximumPrimeDifference(int[] nums) {  
        int minPrimeIndex = -1; // 记录最小质数的下标  
        int maxPrimeIndex = -1; // 记录最大质数的下标  
  
        for (int i = 0; i < nums.length; i++) {  
            if (isPrime(nums[i])) {  
                if (minPrimeIndex == -1) {  
                    minPrimeIndex = i; // 更新最小质数的下标  
                }  
                maxPrimeIndex = i; // 更新最大质数的下标(每遇到一个质数就更新)  
            }  
        }  
  
        // 如果数组中只有一个质数,则最大距离为0  
        if (minPrimeIndex == maxPrimeIndex) {  
            return 0;  
        }  
  
        // 返回最大质数和最小质数之间的下标差  
        return maxPrimeIndex - minPrimeIndex;  
    }  
  
    private boolean isPrime(int n) {  
        if (n <= 1) {  
            return false;  
        }  
        for (int i = 2; i * i <= n; i++) {  
            if (n % i == 0) {  
                return false;  
            }  
        }  
        return true;  
    }  
}

总结

对于在给定整数数组中找到任意两个质数之间最大距离的问题,上述的直接遍历加状态跟踪的解法通常是最简单且直接的方法。虽然可以探索其他解法或优化思路,但在实际应用中,这些方法的效率和可行性可能因问题的具体条件而异。在没有特定要求或限制的情况下,推荐使用直接且有效的方法来解决问题。

Blessed is he whose fame does not outshine his truth. 有福之人,是因为他的真实比他的名誉更耀眼。——泰戈尔

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值