三星
最近三星在国内的热度很高。
首要原因,还是因为存储方面赚了大钱,另外一家同样因为存储赚大钱的公司,是海力士。
另外一个热度高的原因,是因为三星家电决定退出中国市场,退出原因,是因为本来市占率就低得离谱。
其他家电倒是不可惜,退出就退出了,但三星的显示器和电视,有点可惜了。
至于这次三星家电退出导致的裁员,目前有消息曝出,赔偿可能为 N+3,甚至为 N+4。另外,根据三星的内部惯例,还会额外赠送一台三星手机。
虽然有赔偿,但和炙手可热的三星存储还是不能比,一边是今年年终奖可能去到几十个月(并且可能明年也是几十个月,存储缺口预计会到 2027 年),一边是领完大礼包就要着手找工作了。
同样一个公司,不同部门,真的冰火两重天。这种强烈的反差,也经常在 云栈社区 的 开发者广场 上成为大家摸鱼时的谈资。
...
周末,来道简单 算法题
既然聊到了职场冷热,不如放松一下,来看一道简单的算法题。
题目描述
平台:LeetCode
题号:263
给你一个整数 n ,请你判断 n 是否为丑数。如果是,返回 true ,否则,返回 false 。
丑数就是只包含质因数 2、3 和 5 的正整数。
示例 1:
输入:n = 6
输出:true
解释:6 = 2 × 3
示例 2:
输入:n = 8
输出:true
解释:8 = 2 × 2 × 2
示例 3:
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。
示例 4:
输入:n = 1
输出:true
解释:1 通常被视为丑数。
分情况讨论
输入范围是 $-2^{31} \le n \le 2^{31} - 1$,我们只需要对输入进行分情况讨论即可:
- 如果 $n$ 不是正整数(即小于等于 0):必然不是丑数,直接返回
false。
- 如果 $n$ 是正整数:我们对 $n$ 执行
2、 3、 5 的整除操作即可,直到 $n$ 被除干净,如果 $n$ 最终为 1 说明是丑数,否则不是丑数。
注意,2 3 5 先除哪一个都是可以的,因为乘法本身具有交换律。
Java 代码:
class Solution {
public boolean isUgly(int n) {
if (n <= 0) return false;
while (n % 2 == 0) n /= 2;
while (n % 3 == 0) n /= 3;
while (n % 5 == 0) n /= 5;
return n == 1;
}
}
C++ 代码:
class Solution {
public:
bool isUgly(int n) {
if (n <= 0) return false;
while (n % 2 == 0) n /= 2;
while (n % 3 == 0) n /= 3;
while (n % 5 == 0) n /= 5;
return n == 1;
}
};
Python 代码:
class Solution:
def isUgly(self, n: int) -> bool:
if n <= 0:
return False
while n % 2 == 0:
n //= 2
while n % 3 == 0:
n //= 3
while n % 5 == 0:
n //= 5
return n == 1
TypeScript 代码:
function isUgly(n: number): boolean {
if (n <= 0) return false;
while (n % 2 === 0) n /= 2;
while (n % 3 === 0) n /= 3;
while (n % 5 === 0) n /= 5;
return n === 1;
};
- 时间复杂度:当 $n$ 是以 2 为底的对数时,需要除以 $\log_2 n$ 次。复杂度为 $O(\log n)$。
- 空间复杂度:$O(1)$。