平时,我们总能听到各种各样的炫耀,有的直白,有的含蓄。
而我在网络上冲浪时,就发现了一网友的发帖:「30岁+男人最无声的炫富是什么?」最无声的炫富?
我猜肯定不是物质上的。
果不其然,一网友直接回复,「老板,这次理发帮我头发打薄一点。」程序员听了狂喜,这是大家30+后最希望的吧。
接着是「洗脚自由」。啊这,确实让人羡慕。
还有的网友来了一句,「老婆18岁」。不愧是你啊,但是也确实,作为一个男人来说。
大多数网友的回答,还是:「父母身体健康,有个老婆,不一定漂亮、钱多,但是爱你,支持你,一丫一小、粗茶淡饭、衣食无忧。」借你吉言,这里也祝福大家。
看完大家的炫富,每个人都想的不一样。但我觉得健康的家人,和睦的家庭,简单 而幸福的生活,这才是真正意义上的炫富吧。那么大家又是怎么看呢?
下面分享一道大厂的算法题
今日算法题,来自LeetC ode的第41题:缺失的第一个正数,很多 大厂都考过,下面是我的算法思路及实现,让我们来看看吧。
# 缺失的第一个正数
算法题目
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
引言
在编程和算法设计中,寻找未出现的最小正整数是一个经典问题。这个问题看似简单,但要高效地解决它,需要深入理解数组和算法的性质。本文将介绍一种高效的解法,并用JavaScript、Java和Go三种语言分别实现。
算法思路
原地哈希:
首先,我们尝试将所有的正数放到其对应的索引位置上,即数值 1 应该放在数组索引 0 的位置,数值 2 放在索引 1 的位置,以此类推。通过这种方式,我们可以在 O(n) 的时间复杂度内找到缺失的最小正数。
处理边界情况:
对于负数和大于数组长度的数,我们可以忽略不计,因为它们不会影响到我们寻找的最小正数。
寻找缺失的最小正数:
经过上述处理后,我们遍历处理过的数组,找到第一个数值与索引不对应的位置,该位置的索引加 1 即为缺失的最小正数。如果数组中所有数值都正确对应其索引,说明数组是完整的,缺失的最小正数就是数组长度加 1。
代码实现
Java Scrip t实现
functionfirstMissingPositive(nums) {
const n = nums.length;
for (let i = 0; i < n; ++i) {
while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] !== nums[i]) {
const temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
}
for (let i = 0; i < n; ++i) {
if (nums[i] !== i + 1) {
return i + 1;
}
}
return n + 1;
}
Java实现
public classSolution {
publicintfirstMissingPositive(int[] nums) {
int n = nums.length;
for (int i = 0; i < n; i++) {
while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
int temp = nums[nums[i] - 1];
nums[nums[i] - 1] = nums[i];
nums[i] = temp;
}
}
for (int i = 0; i < n; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return n + 1;
}
}
Go实现
funcfirstMissingPositive(nums []int)int {
n := len(nums)
for i := 0; i < n; i++ {
for nums[i] > 0 && nums[i] <= n && nums[nums[i]-1] != nums[i] {
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
}
}
for i := 0; i < n; i++ {
if nums[i] != i+1 {
return i + 1
}
}
return n + 1
}
算法解析
时间复杂度: O(n),尽管内部有一个 while 循环,但每个元素最多只会被交换一次。
空间复杂度: O(1),原地哈希不需要额外的空间。
示例和测试
以数组 [3, 4, -1, 1] 为例:
经过原地哈希处理,数组变为 [1, -1, 3, 4]。
遍历处理过的数组,发现索引 1 的值不为 2,因此缺失的最小正数为 2。
总结
本文介绍了寻找未出现的最小正整数的问题,并提供了一种原地哈希的方法来高效解决这个问题。
热门推荐