leetcode解题思路分析(一百五十三)1342 - 1344 题

本文介绍了三个编程问题的解决方案:用迭代方法计算将非负整数变为0所需的步数,通过前缀和数组计算满足条件的子数组数量,以及计算时钟上时针与分针的角度差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 将数字变成 0 的操作次数
    给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

直接做就完事

class Solution {
public:
    int numberOfSteps(int num) 
    {
        int nCnt = 0;
        while (num != 0)
        {
            if (num % 2 == 0)
              num = num / 2;
            else
              num--;
            nCnt++;
        }

        return nCnt;
    }
};
  1. 大小为 K 且平均值大于等于阈值的子数组数目
    给你一个整数数组 arr 和两个整数 k 和 threshold 。请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。

直接建立一个前缀和数组,然后以K长度遍历一遍即可。

class Solution {
public:
    int numOfSubarrays(vector<int>& arr, int k, int threshold) {
        int nResult = 0;
        std::vector<int> prefixSum(arr.size() + 1, 0);

        for (int i = 0; i < arr.size(); ++i)
        {
            prefixSum[i + 1] = prefixSum[i] + arr[i];
        }

        for (int i = k; i <= arr.size(); ++i)
        {
            if ((double)(prefixSum[i] - prefixSum[i - k]) / k >= threshold)
                nResult++;
        }

        return nResult;
    }
};
  1. 时钟指针的夹角
    给你两个数 hour 和 minutes 。请你返回在时钟上,由给定时间的时针和分针组成的较小角的角度(60 单位制)。

很无聊的一道题,就是求两个角度相减,唯一的坑是时针会随分针有一定的偏移。

class Solution {
  public:
  double angleClock(int hour, int minutes) {
    int oneMinAngle = 6;
    int oneHourAngle = 30;

    double minutesAngle = oneMinAngle * minutes;
    double hourAngle = (hour % 12 + minutes / 60.0) * oneHourAngle;

    double diff = abs(hourAngle - minutesAngle);
    return min(diff, 360 - diff);
  }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch_ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值