# 第 319 场力扣周赛(前两道)

217 阅读2分钟

6233. 温度转换

给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度,以 摄氏度(Celsius)为单位。 你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以数组 ans = [kelvin, fahrenheit] 的形式返回结果。返回数组 ans 。与实际答案误差不超过 10-5 的会视为正确答案。

注意:

  • 开氏度 = 摄氏度 + 273.15
  • 华氏度 = 摄氏度 * 1.80 + 32.00

题目难度:简单

Java语言

class Solution {
    public double[] convertTemperature(double celsius) {
         return new double[]{celsius + 273.15, celsius * 1.80 + 32.00};
    }
}

没什么解题思路,看着来就行,一眼都能看得出答案的那种

6234. 最小公倍数为 K 的子数组数目

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的 子数组 中满足 元素最小公倍数为 k 的子数组数目。 子数组 是数组中一个连续非空的元素序列。 数组的最小公倍数 是可被所有数组元素整除的最小正整数。

输入:nums = [3,6,2,7,1], k = 6 输出:4 解释:以 6 为最小公倍数的子数组是:

  • [3,6,2,7,1]
  • [3,6,2,7,1]
  • [3,6,2,7,1]
  • [3,6,2,7,1]

解题思路:这里我是使用的蛮力穷举,直接按照找出最小公倍数的方法,遍历数组的过程中进行比较。首先,需要知道:

GCD(Greatest Common Divisor)最大公约数。整数 x和 y 的最大公约数是指能同时整除 x 和 y 的最大整数,记为 gcd(x,y)。想必高中数学选修课程中学习过。

最小公倍数(Least Common Multiple) 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数x,y的最小公倍数记为lcm(x,y)。

最大公约数和最小公倍数之间的性质两个自然数的乘积等于这两个自然数的最大公约数和最小公倍数的乘积。最小公倍数的计算要把三个数的公有质因数和独有质因数都要找全,最后除到两两互质为止。

这里显而可见,最小公倍数的求法很简单,就是两个数的乘积/最大公约数。

代码实现如下:

public int subarrayLCM(int[] nums, int k) {
    if (nums == null || nums.length < 0) {
        return 0;
    }
    int count = 0;
    for (int i = 0; i < nums.length; i++) {
        int x = nums[i];
        for (int j = i; j < nums.length; j++) {
            x = lcm(x,nums[j]);//求出当前两个数的最小公倍数
            if(x == k){
                count++;
            }
        }
    }
    return count;
}

int gcd(int x, int y) {
    return y == 0 ? x : gcd(y, x % y);
}

int lcm(int x, int y) {
    return x * y / gcd(x, y);
}