- 将数字变成 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;elsenum--;nCnt++;}return nCnt;}
};
- 大小为 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;}
};
- 时钟指针的夹角
给你两个数 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);}
};