Leetcode 41. 缺失的第一个正数和Leetcode 155. 最小栈

文章目录

  • Leetcode 41. 缺失的第一个正数
    • 题目描述
    • C语言题解和思路
      • 解题思路
  • Leetcode 155. 最小栈
    • 题目描述
    • C语言题解和思路
      • 解题思路


Leetcode 41. 缺失的第一个正数

题目描述

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。

示例 2:

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。

示例 3:

输入:nums = [7,8,9,11,12]
输出:1
解释:最小的正数 1 没有出现。

提示:

1 <= nums.length <= 10^5
-2 ^31 <= nums[i] <= 2 ^31 - 1

C语言题解和思路

int firstMissingPositive(int* nums, int numsSize) {int *table = (int *)malloc(sizeof(int) * (numsSize + 1));memset(table, 0, sizeof(int) * (numsSize + 1));int i;for(i = 0; i < numsSize; i++){if(nums[i] <= numsSize && nums[i] > 0){table[nums[i]]++;}}for(i = 1; i < numsSize + 1; i++){if(table[i] == 0){return i;}}return numsSize + 1;
}

解题思路

哈希表

建立一个比数组长度大一位的数组 table 作为哈希表,并将它初始化为 0 。

循环遍历数组 nums ,如果该位置的值大于 0 并且不小于数组长度,让哈希表 table 在该值的位置自加。

从下标 1 开始循环遍历哈希表,如果在某个下标哈希表的值为 0 ,直接返回这个下标。

如果循环结束没有返回任何值,则返回数组长度加一。

Leetcode 155. 最小栈

题目描述

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

提示:

  • -2 ^31 <= val <= 2 ^31 - 1
  • pop、top 和 getMin 操作总是在 非空栈 上调用
  • push, pop, top, and getMin最多被调用 3 * 10^4 次

C语言题解和思路

typedef struct MinStack{int data[10000];int top;int min[10000];int mintop;
} MinStack;MinStack* minStackCreate() {MinStack *head = (MinStack *)malloc(sizeof(MinStack));head->top = 0;head->mintop = 0;return head;
}void minStackPush(MinStack* obj, int val) {if(obj->mintop == 0 || val <= obj->min[obj->mintop - 1]){obj->min[obj->mintop++] = val;}obj->data[obj->top++] = val;
}void minStackPop(MinStack* obj) {if( obj->min[obj->mintop - 1]  == obj->data[obj->top - 1]){obj->mintop--;}obj->top--;
}int minStackTop(MinStack* obj) {return obj->data[obj->top - 1];
}int minStackGetMin(MinStack* obj) {return obj->min[obj->mintop - 1];
}void minStackFree(MinStack* obj) {free(obj);
}/*** Your MinStack struct will be instantiated and called as such:* MinStack* obj = minStackCreate();* minStackPush(obj, val);* minStackPop(obj);* int param_3 = minStackTop(obj);* int param_4 = minStackGetMin(obj);* minStackFree(obj);
*/

解题思路

定义一个结构体,数组 data 用于存放推进的数据,数组 min 用于存放最小值,变量 top 存放最后进入的数在 data 的下标,变量 mintop 记录最小值在 min 中的下标。

初始化栈时,将 mintop 和 top 初始化为 0 ,返回定义好的指针。

将数据推入栈时:

  • 如果栈中没有最小值或该数小于栈中的最小值时,将该值存入数组 min 中,并更新 mintop 。
  • 将该数据存入数组 data 中,并更新 top 。

将栈顶数据退出栈时:

  • 如果需要推出栈的值等于栈中的最小值,将 mintop 前移一位,将 min 的最小值推出。
  • 将 top 前移一位,将 data 最后进入的值推出。

返回栈顶元素时,根据 top 的值返回数组 data 中的元素。

获取堆栈中的最小元素时,根据 mintop 的值返回数组 miin 中的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript:阻止默认行为导致所有输入框无法输入内容

每次解决一个问题&#xff0c;又会遇到新的问题&#xff0c;最近都是忙着改大屏设计器&#xff0c;加容器组件&#xff0c;眼看着要完成了&#xff0c;突然遇到一个大问题&#xff0c;表单的输入框突然全部无法输入数字和英文&#xff0c;搜了很多类似情况&#xff0c;大多数说…

ffmpeg支持MP3编码的方法

目录 现象 解决办法 如果有编译包没有链接上的情况 现象 解决办法 在ffmpeg安装包目录下 &#xff0c;通过./configure --list-encoders 和 ./configure --list-decoders 命令可以看到&#xff0c;ffmpeg只支持mp3解码&#xff0c;但是不支持mp3编码。 上网查寻后发现&…

lock_icon_container LockIconContainer的显示

LockIconContainer 是直接在super_notification_shade.xml 里面的&#xff1a; lock_icon_container <?xml version"1.0" encoding"utf-8"?> <!-- This is the notification shade window. --> <com.android.systemui.statusbar.phone.…

预训练模型基础:bpe_simple_vocab_16e6.txt 语料库,BPE 算法

预训练模型基础 bpe_simple_vocab_16e6.txtBPE bpe_simple_vocab_16e6.txt bpe_simple_vocab_16e6.txt.gz 文件是一个使用字节对编码&#xff08;Byte Pair Encoding&#xff0c;BPE&#xff09;算法生成的词汇表文件。文件内的单元是基于统计学上的频次自动生成的子词单元。如…

C++ :设计模式实现

文章目录 原则单一职责原则开闭原则依赖倒置原则接口隔离原则里氏替换原则 设计模式单例模式观察者模式策略模式代理模式 原则 单一职责原则 定义&#xff1a; 即一个类只负责一项职责 问题&#xff1a; 类 T 负责两个不同的职责&#xff1a;职责 P1&#xff0c;职责 P2。当…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

使用CSS+HTML完成导航栏

HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>导航栏示例</title> &l…

07 内核开发-避免命名冲突经验技巧分享

07 内核开发-避免命名冲突经验技巧分享 目录 07 内核开发-避免命名冲突经验技巧分享 1.如何在内核开发过程中&#xff0c;避免命名冲突 2. 背景 3.避免方法 4.了解下 文件/proc/kallsyms 5.总结 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的…

java-异常

一、异常的概念及分类 Exception&#xff1a;异常&#xff0c;代表程序可能出现的问题 Exception分为两类&#xff1a; 1、运行时异常&#xff1a;RuntimeException以及其子类&#xff0c;编译阶段不会出现异常提醒&#xff0c;在运行阶段会出现异常提醒 2、编译时异常&…

最全!2024百度Spring Zuul面试题大全,详解每个角落,面试必备宝典!收藏版!

随着微服务架构在现代软件开发中的广泛采用&#xff0c;了解和掌握如何通过服务网关管理和优化服务间的交互变得至关重要。Spring Zuul&#xff0c;作为Spring Cloud生态系统中的关键组件之一&#xff0c;提供了强大的路由、过滤和安全功能&#xff0c;帮助开发者在微服务架构中…

基于SpringBoot+Vue网上商城系统的设计与实现

系统介绍 随着社会的不断进步与发展&#xff0c;人们经济水平也不断的提高&#xff0c;于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来&#xff0c;利用计算机网络来处理各行业事务这一概念更深入人心&#xff0c;由于用户工作繁忙的原因&#xff0c;去商…

抽象工厂模式设计实验

【实验内容】 楚锋软件公司欲开发一套界面皮肤库&#xff0c;可以对 Java 桌面软件进行界面美化。为了保护版权&#xff0c;该皮肤库源代码不打算公开&#xff0c;而只向用户提供已打包为 jar 文件的 class 字节码文件。用户在使用时可以通过菜单来选择皮肤&#xff0c;不同的…

Java数据类型以及范围

数据类型&#xff1a; 取值范围&#xff1a; 取值&#xff1a;

UniApp状态管理:从深入理解到灵活运用

在UniApp开发中&#xff0c;状态管理是一个至关重要的概念&#xff0c;它决定了应用程序的结构、性能和可维护性。本文将深入探讨UniApp中的状态管理&#xff0c;从基础知识到高级技巧&#xff0c;帮助开发者更好地理解和应用状态管理。 1. 什么是状态管理&#xff1f; 在Uni…

PHP是什么以及它的主要用途是什么?

PHP是什么以及它的主要用途是什么&#xff1f; PHP&#xff0c;全称Hypertext Preprocessor&#xff0c;是一种通用的开源脚本语言。它尤其适用于Web开发&#xff0c;并可嵌入HTML中。PHP最初的设计目标是创建动态生成的网页&#xff0c;随着其不断的发展&#xff0c;现在的PH…

磁性呼吸传感技术与机器学习结合在COVID-19审断中的应用

介绍 呼吸不仅是人类生存的基础&#xff0c;而且其模式也是评估个体健康状态的关键指标。异常的呼吸模式往往是呼吸系统疾病的一个警示信号&#xff0c;包括但不限于慢性阻塞性肺病&#xff08;COPD&#xff09;、阻塞性睡眠呼吸暂停&#xff08;OSA&#xff09;、肺炎、囊性纤…

TensorFlow 用 hashtable 的意义

TF的hashtable用来存不连续的id/int的embedding的&#xff0c; 就是比如id从1-100000&#xff0c;但1-100000里有很多值是空的&#xff0c; 如果id就是1-500&#xff0c;是满的&#xff0c;从1-500都有值&#xff0c;可以用一个 501 * hidden_size 的embedding_matrix存embed…

idea连接Docker数据库

我们在docker下创建了数据库&#xff0c;想要更方便的查看和操作该数据库&#xff0c;idea和DataGrip或者其他软件都可以。在数据库连接时需要填写数据库名字&#xff0c;主机&#xff0c;端口&#xff0c;数据库用户名和密码。 输入之后先不要点击OK和按Enter键&#xff0c;我…

GAN详解,公式推导解读,详细到每一步的理论推导

在看这一篇文章之前&#xff0c;希望熟悉掌握熵的知识&#xff0c;可看我写的跟熵相关的一篇博客https://blog.csdn.net/m0_59156726/article/details/138128622 1. GAN 原始论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 放一张GAN的结构&#xff0c;如下&#xff1…

Linux:动静态库介绍

动静态库 库的介绍开发环境 & 编译器库存在的意义库的实现库的命名静态库制作和使用总结 动态库的制作和使用动态库的使用方法方法一方法二方法三 库加载问题静态库加载问题动态库的加载问题与位置无关码 C/C静态库下载方式 库的介绍 静态库&#xff1a;程序在编译链接的时…