30岁+男人最无声的炫富是什么?网友:老婆18岁~
平时,我们总能听到各种各样的炫耀,有的直白,有的含蓄。而我在网络上冲浪时,就发现了一网友的发帖:“30岁+男人最无声的炫富是什么?”最无声的炫富?我猜肯定不是物质上的。
果不其然,一网友直接回复,“老板,这次理发帮我头发打薄一点。”程序员听了狂喜,这是大家30+后最希望的吧。
接着是“洗脚自由”。啊这,确实让人羡慕。
还有的网友来了一句,“老婆18岁”。不愧是你啊,但是也确实,作为一个男人来说。
大多数网友的回答,还是:“父母身体健康,有个老婆,不一定漂亮、钱多,但是爱你,支持你,一丫一小、粗茶淡饭、衣食无忧。”借你吉言,这里也祝福大家。
专属福利 👉点击领取:最全Python资料合集
看完大家的炫富,每个人都想的不一样。但我觉得健康的家人,和睦的家庭,简单而幸福的生活,这才是真正意义上的炫富吧。那么大家又是怎么看呢?
今日算法题,来自LeetCode的第41题:缺失的第一个正数,很多大厂都考过,下面是我的算法思路及实现,让我们来看看吧。
缺失的第一个正数
算法题目
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
引言
算法思路
原地哈希:
首先,我们尝试将所有的正数放到其对应的索引位置上,即数值 1 应该放在数组索引 0 的位置,数值 2 放在索引 1 的位置,以此类推。通过这种方式,我们可以在 O(n) 的时间复杂度内找到缺失的最小正数。
处理边界情况:
对于负数和大于数组长度的数,我们可以忽略不计,因为它们不会影响到我们寻找的最小正数。
寻找缺失的最小正数:
经过上述处理后,我们遍历处理过的数组,找到第一个数值与索引不对应的位置,该位置的索引加 1 即为缺失的最小正数。如果数组中所有数值都正确对应其索引,说明数组是完整的,缺失的最小正数就是数组长度加 1。
代码实现
JavaScript实现
function firstMissingPositive(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;}
public class Solution {public int firstMissingPositive(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;}}
func firstMissingPositive(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。
总结
热门推荐