当前位置: 首页 > news >正文

LeetCode 刷题【41. 缺失的第一个正数】

41. 缺失的第一个正数

自己做

解1:完整排序

class Solution {
public:int firstMissingPositive(vector<int>& nums) {//排序sort(nums.begin(),nums.end());//找数int res = 1;for(int i = 0; i < nums.size(); i++){if(nums[i] > 0 && nums[i] == res)             //nums[i] == res表示该数存在res++;}return res;}
};

解2:堆排序

这里堆排序的代码实现忘了,边搜边做

class Solution {
public://堆排序//调整堆void Heapify(vector<int>& nums, int n, int idx) {          //n表示未排好序的部分【每出堆一个就表示排好一个元素,idx表示堆顶元素的索引下标】int min = idx;        //堆顶元素int left = 2 * idx + 1;    //左下元素int right = 2 * idx + 2;  //右下元素if (left < n && nums[left] < nums[min])     //left < n表示下标在合理范围, nums[left] < nums[min]表示左下更小min = left;if (right < n && nums[right] < nums[min])     //left < n表示下标在合理范围, nums[left] < nums[min]表示左下更小min = right;if (min != idx) {                           //如果发现了比堆顶更小的元素,将堆顶与其交换swap(nums[min], nums[idx]);Heapify(nums, n, min);        //nums[min]与nums[idx]交换后,对于min作为堆顶的子堆中可能会发生变化【比如调整后,其子堆就不是一个合规的子堆了,这就要继续调整】}}//弹出堆顶元素void heapSort(vector<int>& nums, int& res) {int n = nums.size();for (int i = n / 2; i >= 0; i--) {       //从最下面的堆开始调整(右下角最后一个子堆)Heapify(nums, n, i);}//弹出元素【小顶堆中每次调整后,最小元素会出现在索引为0的位置】for (int i = n - 1; i >= 0; i--) {if (nums[0] == res) {            //检查当前最小元素,如果相等则说明这个最小正数已经出现,res++并且继续往后找res++;swap(nums[0], nums[i]);Heapify(nums, i, 0);            //弹出元素后堆又乱了,重新调整}else if (nums[0] < res) {       //nums[0] < res表示现在还没有找到,继续找swap(nums[0], nums[i]);Heapify(nums, i, 0);            //弹出元素后堆又乱了,重新调整}else                        //nums[0] > res说明已经找完了,当前的res就是我们要的结果break;}}int firstMissingPositive(vector<int>& nums) {int res = 1;heapSort(nums, res);return res;}
};

看题解

解:哈希表

根据思路写

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();vector<bool> hash(n,false);       //哈希表for(int i = 0; i < n; i++){if(nums[i] > 0 && nums[i] <= n){  //在合理范围内就标记已存在hash[nums[i] - 1] = true;}}for(int i = 0; i < n; i++){if(hash[i] == false)return i + 1;}//如果上面全部找不到,说明这是按顺序存放的(从1到n),那么未出现的就是n+1return n + 1;}
};

http://www.dtcms.com/a/331360.html

相关文章:

  • 【力扣322】零钱兑换
  • 非容器方式安装Prometheus和Grafana,以及nginx配置访问Grafana
  • GraphRAG查询(Query)流程实现原理分析
  • NetLimiter:精准掌控网络流量,优化网络体验
  • 《中国人工智能安全承诺框架》发布
  • arthas火焰图怎么看
  • 搭建 Docker 私有仓库
  • 前端css学习笔记5:列表表格背景样式设置
  • 【Golang】Golang内存泄漏问题排查(二)
  • 服务器路由相关配置Linux和Windows
  • Android POS应用在android运行常见问题及解决方案
  • 当消息队列遇上AI:飞算JavaAI实现智能流量调度与故障自愈实践
  • 在 Windows 系统中解决 Git 推送时出现的 Permission denied (publickey) 错误,请按照以下详细步骤操作:
  • LE AUDIO---Common Audio Service
  • C#WPF实战出真汁02--登录界面设计
  • STM32学习笔记11-通信协议-串口基本发送与接收
  • 从轨道根数计算惯性系到轨道系旋转矩阵
  • 2020/12 JLPT听力原文 问题二 1番
  • [激光原理与应用-268]:理论 - 几何光学 - 人眼结构与颜色感知
  • Nacos 配置热更新:Spring Boot Bean 自动获取最新配置
  • 【21-倾斜数据集的误差指标】
  • 金融风控实战:从数据到模型的信用评分系统构建全解析
  • 使用马尔可夫链如何解码、预测股市模式
  • 西门子PLC通过稳联技术EtherCAT转Profinet网关连接baumuller伺服器的配置案例
  • ThreadPoolExecutor 最佳实践
  • 8月AI面试工具测评:破解规模化招聘难题
  • 哈希表特性与unordered_map/unordered_set实现分析
  • 风电功率预测实战:从数据清洗到时空建模​​
  • 从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统
  • 大规模分布式光伏并网后对电力系统的影响