Cracking the coding interview--Q3.2

AutoJs调用DeepSeek大模型接口实战教程 AutoJs接入DeepSeek、 DeepSeek API调用 、 手机脚本接入大模型 通过这篇文章,我们用 AutoJs 成功接入了 DeepSeek Chat API。使用发送请求在 Header 里正确携带 API Key从里拿到最终返回结果这样一来,你就可以在 AutoJs 里实现一个智能助手脚本,甚至做更复杂的 AI 自动化工具。 阅读详情

原文:

How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push, pop and min should all operate in O(1) time.

译文:

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。


方法一:

最直接的想法是使用一个变量,实时记录当前最小值元素所在数组下标,但是存在问题,如果最小值为栈顶元素,则此时出栈之后,下一个

最小值元素所在位置无法得知

可以使用方法,数组元素使用结点,两个元素,一个记录当前元素的值,一个记录以当前元素为栈顶时候的最小值,这样使得如果元素出栈,

则下一个栈顶元素中始终记录下一个最小值,而且元素入栈时候也只需要比较当前入栈元素和之前元素所记录最小值比较,如果小于则记录当前袁术

为栈顶最小值,如果大于,则直接复制之前的最小值,也就是和之前元素的最小值一样。

只是需要牺牲空间,因为每个元素所在结点需要同时记录当前元素,还需要记录以当前元素为栈顶的最小值元素。


package chapter_3_StacksandQueues;

class Node_2 {
	public int data;
	// 区间当前位置到栈底元素中最小的
	// 这样如果当前栈顶最小元素出栈,则下一个元素始终记录当前栈最小元素,并获取时间复杂度最小0(1)
	public int preMin; 
}

/**
 *	
 * 出栈,入栈,获取栈内最小元素时间复杂度都是0(1)
 * 
 */
class Stack_2 {
	private Node_2 stack[] ;
	private int size;
	private int top;

	public Stack_2(int size) {
		stack = new Node_2[size];
		this.size = size;
		top = -1;
	}

	public boolean isEmpty() {
		return top == -1;
	}

	public boolean isFull() {
		return top == (size-1);
	}

	public void push(int data) {
		if (isFull()) {
			System.out.println("Stack if full!");
			return;
		}
		stack[++top] = new Node_2();
		stack[top].data = data;
		if(top == 0) {
			stack[top].preMin = data;
		} else {
			stack[top].preMin = data < stack[top-1].preMin ? data: stack[top-1].preMin; 
		}
	}

	public void pop() {
		if (isEmpty()) {
			System.out.println("Stack if empty!");
			return;
		}
		top--;
	}

	public int top() {
		if (isEmpty()) {
			System.out.println("Stack if empty!");
			return -1;
		}
		return stack[top].data;
	}
	
	public int min() {
		if (isEmpty()) {
			System.out.println("Stack if empty!");
			return -1;
		}
		return stack[top].preMin;
	}
}

/**
 *
 * 实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。
 *
 */
public class Question_3_2 {
	public static void main(String args[]) {
		Stack_2 stack = new Stack_2(15);
		int data[] = {1,2,3,10,9,8,7,5,10,100,102,12,-1};
		for(int i=0; i<data.length; i++) {
			stack.push(data[i]);
			System.out.println("Cur Min in Stack is = " + stack.min());
		}
		
		stack.pop();
		System.out.println("Cur Min in Stack is = " + stack.min());
	}
}



方法二:


上述方法需要两倍的空间开销,并且如果存在入栈元素是倒序入栈,1,2,3,4,5,6,7,8,9,10.....则每个结点中记录的当前

位置之前的最小值都是1,因为不管在哪个位置,当前的最小值都是1,则存在严重的数据冗余问题,如何消去这些冗余数据,则可以使用一个链栈来表示最小值情况。最小值链栈始终记录当前情况下的最小值。

如果元素入栈,同时比较当前最小值链栈栈顶元素,如果比栈顶元素小,则说面当前元素为最小值(当前情况下),则入栈最小值栈。

如果大于等于,则无需入栈,栈顶元素还是当前最小值。

如果出栈,则比较当前出栈元素和最小值链栈栈顶元素大小,如果等于栈顶元素,则说明当前元素如果没有出栈,则是最小值,出栈,则不再存在这个元素,自然需要去除最小值的记录,则同时也出栈。不等于,则无需出栈。



package chapter_3_StacksandQueues;

class Node_2_2 {
	public int data;
	public Node_2_2 pre;
}

/**
 * 
 * 链栈记录非冗余最小值
 *
 */
class Stack_Min {
	private Node_2_2 top;
	
	public Stack_Min() {
		top = null;
	}
	
	public boolean isEmpty() {
		return top == null;
	}
	
	public void push(int data) {
		Node_2_2 node = new Node_2_2();
		node.data = data;
		if(top == null) {
			top = node;
			top.pre = null;
		} else {
			node.pre = top;
			top = node;
		}
	}
	
	public int top() {
		if(top == null) {
			System.out.println("Stack if empty!");
			return -1000;
		}
		return top.data;
	}
	
	public void pop() {
		if(top == null) {
			System.out.println("Stack if empty!");
			return;
		}
		top = top.pre;
	}
	
}

/**
 * 
 * 假设除了用一个栈s1来保存数据,还用另一个栈s2来保存这些非冗余最小值
 *
 */
class Stack_2_2 {
	private int stack[];
	private int top;
	private int size;
	// 实时栈顶记录当前最小值
	// 如果元素入栈,stack_Min判断栈顶元素和入栈元素大小,是当前最小则同时入栈stack_Min
	private Stack_Min stack_Min;
	
	public Stack_2_2(int size) {
		stack = new int[size];
		this.size = size;
		top = -1;
		stack_Min = new Stack_Min();
	}
	
	public boolean isEmpty() {
		return top == -1;
	}

	public boolean isFull() {
		return top == (size-1);
	}
	
	public void push(int data) {
		if(isFull()) {
			System.out.println("Stack if full!");
			return;
		}
		stack[++ top] = data; 
		int minTop = stack_Min.top();
		// 判断是否比最小值stack_Min栈顶元素还小
		// 如果小玉stack_Min栈顶则当前data为最小,则入栈
		if(minTop == -1000 || data < minTop) {
			stack_Min.push(data);
		} 
	}
	
	public int top() {
		if (isEmpty()) {
			System.out.println("Stack if empty!");
			return -1000;
		}
		return stack[top];
	}
	
	public void pop() {
		if (isEmpty()) {
			System.out.println("Stack if empty!");
			return;
		}
		int minTop = stack_Min.top();
		if(stack[top] == minTop) {
			stack_Min.pop();
		}
		top--;
	}
	
	public int min() {
		return stack_Min.top();
	}
}

/**
*
* 实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。
*
*/
class Question_3_2_2 {
	public static void main(String args[]) {
		Stack_2 stack = new Stack_2(15);
		int data[] = {10,28,30,15,90,8,7,5,13,1,102,12,-1};
		for(int i=0; i<data.length; i++) {
			stack.push(data[i]);
			System.out.println("Cur Min in Stack is = " + stack.min());
		}
		
		System.out.println("pop");
		stack.pop();
		
		System.out.println("Cur Min in Stack is = " + stack.min());
	}
}


参考自:http://hawstein.com/posts/3.2.html


蓝牙模块HM-10手册 蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。 立即下载

相关推荐

【蓝桥杯——单片机学习笔记】十三.点阵(STC15F2K60S2)

一.点阵内部图 点阵的有两种,分为共阴和共阳(与数码管类似,后续代码根据共阳点阵编写)。点阵的控制主要是每行和每列电平的控制。如图,以共阳为例:若要使左上角的灯亮,则第一行输出高电平(其他行均为低电平),第一列输出低电平(其他列均为高电平)。 二.原理图 与数码管共用接口,所以数码管和点阵的显示只能选一个使用! 原理图中点阵的接口R5即代表第5行(Row),C8即代表第8列(Column)。通...

默默无闻小菜鸡的博客 2011

Cracking the coding interview--Q2.3

题目 原文: Implement an algorithm to delete a node in the middle of a single linked list, given only access to that node. EXAMPLE Input: the node ‘c’ from the linked list a->b->c->d->e Result: nothin

cfanr 1388

WPS集成DeepSeek最新教程,附详细图文,让文案生成更智能

本文将为大家详细介绍如何将 DeepSeek 功能集成到 WPS 中,通过 OfficeAI 插件,你无需进行复杂的本地部署,只需通过官网连接即可快速启用 DeepSeek 强大的 AI 功能。不论是文案生成、翻译校对,还是深度推理、决策支持,DeepSeek 都能为你提供便捷的解决方案。让我们一起来看看如何操作吧!

Java徐师兄的博客 6万+

Cracking the Coding Interview Q2.3

Implement an algorithm to delete a node in the middle of a single linked list, given only access to that node. 思路:复制后面节点的值,然后删除后面的节点。 注意:如果给定的节点是最后一个,则无解。。 public static boolean deleteN...

weixin_30855761的博客 108

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

GPT Researcher 的win docker安装攻略

github网址是:https://github.com/assafelovic/gpt-researcher/blob/master/README-zh_CN.md。使用 Docker 运行 AI-Researcher 项目的。因为docker安装方法不够清晰,因此写一个使用方法。打开设置——docker engine ,增加代码。如有其他问题,可提供错误截图或日志进一步排查!

weixin_43818488的博客 1122

Cracking the coding interview--Q4

Chapter 4 | Trees and Graphs 4.1 Implement a function to check if a tree is balanced. For the purposes of this question, a balanced tree is defined to be a tree such that no two leaf nodes differ

763

024、反激变换器的短路保护设计

本文详细探讨了反激变换器短路保护的设计要点与实践经验。作者通过实际案例分析了短路时反激拓扑的电流特性,指出初级峰值电流限制是最基础的保护手段,但需配合打嗝模式使用。文章重点剖析了打嗝模式设计的三个关键陷阱:频率设定、退出条件和软启动衔接。同时强调次级侧辅助保护、变压器参数优化、环路响应协调的重要性,并比较了自恢复与锁死方案的适用场景。最后提出实测验证的四个关键点和设计经验:不盲信芯片手册、保护电路独立设计、充分留有余量、进行破坏性测试。全文以工程实践为导向,为反激电源的可靠短路保护提供了系统性解决方案。

Jack010169的博客 237

cracking-the-coding-interview的核心秘密:如何用单元测试“定义”面试题?C++ Catch+Python unittest的TDD完整教程

cracking-the-coding-interview 是一个为《Cracking the Coding Interview》(CTCI)第 6 版提供 **C++ 与 Python 双语言解法** 的开源项目,其最大特色是:**每一道面试题的解法都配有完整的自动化单元测试**(C++ 端用 Catch 框架,Python 端用 unittest 框架),自动化测试覆盖率超过 90%。更妙的是

gitblog_00501的博客 317

在 TASKPROCESSING 上为 ABAP OData 服务添加多个系统别名:从原理到落地的完整实践

本文面向SAP Gateway与ABAP开发者,详细讲解如何在TASKPROCESSING OData服务上添加系统别名。首先介绍了系统别名的概念与设计初衷,阐述了添加别名的业务场景需求,包括多系统接入、用户分流和灰度发布等。随后提供了标准配置步骤,从SPRO路径到具体操作说明,并分享了三个实际案例说明如何实现跨区域统一待办、按用户角色分流和灰度发布。最后给出了验证方法和常见问题解决方案,帮助开发者掌握这项基础但关键的配置技能,实现服务路由的可控管理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 136

uniapp - [全端兼容] 实现精美Editor富文本编辑器功能,uniApp全平台兼容的富文本插件组件用户可上传图片及对接服务器存储文件等,手机移动端H5网页富文本/小程序富文本/App富文本!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp富文本编辑器,uniapp中如何实现各平台都兼容的富文本编辑器,Editor富文本插件,uniApp微信小程序富文本,UNI-APP安卓苹果ios系统App端富文本组件,editor富文本编辑器如何实现上传图片,图片上传后不显示怎么办,如何配置图像上传功能,富文本图片上传怎么传到服务器中,获取图片路径,editor插入图片,富文本编辑器上传图片,报错怎么办,跨域CORS处理,配置不行无效

🏆 前端领域优质创作者 1万+

Cracking the coding interview--Q9

Chapter 9 | Sorting and Searching 9.1 You are given two sorted arrays, A and B, and A has a large enough buffer at the end to hold B. Write a method to merge B into A in sorted order. 插入排序,需要调整数

1020

ollama如何在自己的服务器上跑Qwen3(小白必看)

在国内下载ollama最新安装包时,使用curl -fsSL https://ollama.com/install.sh | sh命令可能会遇到网络问题导致下载进度停滞。为了解决这一问题,可以通过国内的镜像源进行下载,例如使用modelscope社区提供的最新ollama镜像仓库。具体步骤包括:首先通过pip install modelscope安装modelscope,然后使用modelscope download命令下载ollama-linux镜像,接着进入下载目录并赋予安装脚本执行权限,最后运行安装脚

Ven%的博客 756

Cracking the coding interview--Q17

Chapter 17 | Networking 17.1 Explain what happens, step by step, after you type a URL into a browser. Use as much detail as possible.  先进行DNS的namequery,得到对方的cname或者a记录(当然也可能是IPV6),反正就最后得到对方的IP

630

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Cracking the coding interview--Q3.6

原文: Write a program to sort a stack in ascending order. You should not make any assumptions about how the stack is implemented. The following are the only functions that should be used to write thi

执子之手 560

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

渣基础:比照Hawstein学Cracking the coding interview(1)

《C++ Primer 第五版》书实在是太长,太厚了。总是看了十几页就看累了,坚持不了多久,想了想还是别勉强自己,jued

低端玩家的记录地 949

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Cracking the coding interview--Q4.2

原文: Given a directed graph, design an algorithm to find out whether there is a route between two nodes. 译文: 给定一个有向图,设计算法判断两结点间是否存在路径。 根据题意,给定一个有向图和起点终点,判断从起点开始,是否存在一条路径可以到达终点。 考查的就是图

执子之手 395

Cracking the coding interview--Q9.3

题目 原文: Given a sorted array of n integers that has been rotated an unknown number of times, give an O(log n) algorithm that finds an element in the array. You may assume that the array was originall

cfanr 1620

Cracking the coding interview--Q3.5

题目 原文: Implement a MyQueue class which implements a queue using two stacks. 译文: 用两个栈实现一个队列MyQueue。 解答 方法

cfanr 1448

Cracking the Coding Interview Q2.1

本博客记录我用C++刷cracking the coding interview的历程。。。

u011347440的专栏 721

Cracking the coding interview--Q1.1

作者:ustcweijie 参考:http://hawstein.com/posts/1.1.html 1. 题目 原文:Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?

蔚蓝天空 546

Cracking the coding interview Q1.1

最近在看Cracking the coding interview 有一个c++习题版本的,地址地址如下:地址 本人一边看一边尝试着用python写一下 python新手,先练练手

djh512的专栏 1087
上一篇: Cracking the coding interview--Q3.1
下一篇: Cracking the coding interview--Q3.3
java_wliang
博客等级 码龄15年 19粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值