欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 408算法题leetcode--第四天

408算法题leetcode--第四天

2025/2/21 3:12:41 来源:https://blog.csdn.net/weixin_58073817/article/details/142262111  浏览:    关键词:408算法题leetcode--第四天

41. 缺失的第一个正数

  • 41. 缺失的第一个正数
  • 思路:如代码,可以看官方题解
  • 时间复杂度:O(n);空间:O(1)
class Solution {
public:int firstMissingPositive(vector<int>& nums) {// 假设有n个数,那么缺失的第一个正数一定在[1, n + 1]之间// 如果使用O(n)的额外空间,可以用哈希表先记录所有数,然后遍历[1, n+1]// 如果只用O(1)的额外空间;可以用nums本身作为哈希表,下标[0, size - 1]代表[1, size]// 如[3, 2, 5, 0],遍历到3,将下标2置为负数;用负数代表该下标的数值存在,正数代表缺失// 这样只需再次遍历数组,第一个正数即答案// 注意<=0和>=n的数不处理int size = nums.size();for(int& i : nums){  // 不处理if(i <= 0) i = size + 1;}// 第一次遍历for(auto i : nums){int abs_i = abs(i);if(abs_i <= size){nums[abs_i - 1] = -abs(nums[abs_i - 1]);  // 置为负数}}// 第二次遍历for(int i = 0; i < size; ++i){if(nums[i] > 0){return i + 1;}}return size + 1;}
};

387. 字符串中的第一个唯一字符

  • 387. 字符串中的第一个唯一字符
  • 思路:哈希表记录每个字符的个数,然后再次遍历观察哪个字符个数为1
  • 时间:O(n);空间:O(字符种类数)
class Solution {
public:int firstUniqChar(string s) {unordered_map<char, int>mp;for(auto c : s){mp[c]++;}int size = s.size();for(int i = 0; i < size; i++){if(mp[s[i]] == 1){return i;}}return -1;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词