这次面试我们轻装上阵
力扣推出的一组题,选取企业题库近三个月TOP45真题。
活动规则:
2025年3月10号~20253月30号,共三周,活动期间,每周一上午10:30准时发布本周挑战题目,每周15题。
3115. 质数的最大距离(20250310) 字节跳动
给出一个数组,求最大的两个质数的下标距离,题目给出的数组最少有一个质数
思路就是从左到右找第一个质数,从右到左找第一个质数。
判断一个数是不是质数,只需要判断从i到sqrt(n)中有没有能被整除的数。
Java
class Solution {
public int maximumPrimeDifference(int[] nums) {
// 从左到右找第一个
int left = 0;
while(left < nums.length){
if(isPrime(nums[left])){
break;
}
left++;
}
// 从右到左到第一个
int right = nums.length-1;
while(right>=0){
if(isPrime(nums[right])){
break;
}
right--;
}
return right - left;
}
public boolean isPrime(int n){
// 1既不是质数,也不是合数
for(int i = 2;i * i <= n;i++){ // 判断质数 i*i <= n
if(n % i == 0){
return false;
}
}
return n >= 2; // 返回 n >= 2
}
}
Python
class Solution:
def is_prime(self, n):
# is_prime = lambda n: n >= 2 and all(n % i for i in range(2, isqrt(n) + 1))
i = 2
while i * i <= n:
if n % i == 0:
return False
i += 1
return True if n>=2 else False
def maximumPrimeDifference(self, nums: List[int]) -> int:
left = 0
while left < len(nums):
if self.is_prime(nums[left]):
break
left += 1
right = len(nums) -1
while right >= 0:
if self.is_prime(nums[right]):
break
right -=1
return right - left
3099. 哈沙德数(20250310)字节跳动
哈沙德数就是能够整除所有位数之和的数。
解题的话就是让num每一位上的数进行相加,最后判断num余_sum是否为0。
需要注意的就是,需要创建变量保存最开始的num。
Java
class Solution {
public int sumOfTheDigitsOfHarshadNumber(int x) {
int y = x;
int sum = 0;
while (y > 0) {
sum += (y % 10);
y /= 10;
}
return x % sum == 0 ? sum : -1;
}
}
Python
class Solution:
def sumOfTheDigitsOfHarshadNumber(self, x: int) -> int:
y = x
_sum = 0
while y > 0:
_sum += (y % 10)
y //= 10
return _sum if x % _sum == 0 else -1