2024年最新【LeetCode刷题日记】[剑指 Offer 30,2024年Golang常见面试题目

10 篇文章 0 订阅
10 篇文章 0 订阅

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • int param_3 = obj->top();
  • int param_4 = obj->min();
    */

C



typedef struct {

} MinStack;

/** initialize your data structure here. */

MinStack* minStackCreate() {

}

void minStackPush(MinStack* obj, int x) {

}

void minStackPop(MinStack* obj) {

}

int minStackTop(MinStack* obj) {

}

int minStackMin(MinStack* obj) {

}

void minStackFree(MinStack* obj) {

}

/**

  • Your MinStack struct will be instantiated and called as such:

  • MinStack* obj = minStackCreate();

  • minStackPush(obj, x);

  • minStackPop(obj);

  • int param_3 = minStackTop(obj);

  • int param_4 = minStackMin(obj);

  • minStackFree(obj);
    */


### 解题思路


此题要求写一个栈,与普通栈不同的是多出了一个获取最小值的方法。由于栈比较简单,这里就不多说了,主要还是说说怎么以 O(1) 的时间复杂度查找栈中的最小值。


使用一个变量 min 记录每次栈中的最小值,每次有元素进栈都对 min 进行更新。  
 这个方法存在一个问题,没有考虑出栈时,怎么对 min 进行更新。  
 为了解决出栈对最小值的更新,可以设定一个辅助栈,栈顶表示当前数据栈中的最小值,每次有元素入栈,就将当前最小值入辅助栈。出栈时,辅助栈也要将栈顶元素出栈,这就解决了出栈时的最小值更新问题。  
 push:将数据入栈的同时,更新最小值。如果入栈元素大于辅助栈顶元素(也就是元素入栈前,数据栈中的最小值),则最小值依旧是数据栈原来的最小值,否则将元素入辅助栈。


![GIF 2021-8-6 18-17-13.gif](https://img-blog.csdnimg.cn/img_convert/d16c07a1df82446347ea139dce8197f9.gif)


**pop**:将数据栈和辅助栈的栈顶元素同时出栈,保持辅助栈的栈顶元素是数据栈中的最小值。


![GIF 2021-8-6 18-23-10.gif](https://img-blog.csdnimg.cn/img_convert/77d13c246b407d1b9e6e6333393c5a63.gif)


C



#define max_size 10000
//x_stack存储正常入栈元素,min_stack用来存储入栈时栈中最小的元素
//x_top和min_top分别为栈顶的下标
//min_value用来存储最小值
typedef struct {
int *x_stack;
int *min_stack;
int x_top;
int min_top;
int min_value;
} MinStack;

/** initialize your data structure here. */

MinStack* minStackCreate() {
MinStack obj = (MinStack)malloc(sizeof(MinStack));
obj->x_stack = (int*)malloc(sizeof(int) * max_size);
obj->min_stack = (int*)malloc(sizeof(int) * max_size);
obj->min_top = obj->x_top = -1;
obj->min_value = 0;
return obj;
}

void minStackPush(MinStack* obj, int x) {
if(obj->x_top < max_size)
{
if(obj->x_top == -1)
obj->min_value = x;
obj->x_stack[++(obj->x_top)] = x;
if(x < obj->min_value)
obj->min_value = x; //当前元素比min_value小时改变min_value
obj->min_stack[++(obj->min_top)] = obj->min_value;
}
}

void minStackPop(MinStack* obj) {
–(obj->x_top);
–(obj->min_top);
if(obj->min_top != -1)
obj->min_value = obj->min_stack[obj->min_top];//出栈后将min_value变成min_stack的栈顶元素
}

int minStackTop(MinStack* obj) {
return obj->x_stack[obj->x_top];
}

int minStackMin(MinStack* obj) {
return obj->min_stack[obj->min_top];
}

void minStackFree(MinStack* obj) {
free(obj->x_stack);
free(obj->min_stack);
free(obj);
}

/**

  • Your MinStack struct will be instantiated and called as such:

  • MinStack* obj = minStackCreate();

  • minStackPush(obj, x);

  • minStackPop(obj);

  • int param_3 = minStackTop(obj);

  • int param_4 = minStackMin(obj);

  • minStackFree(obj);
    */


C++



方法:维护一个数据栈和一个辅助栈。数据栈用于存放每次新进入的x,辅助栈用于存放每个x进入数据栈后,数据栈中已有元素的最小值(即辅助栈的top()始终存放着当前数据栈的最小值)。数据栈中的元素个数始终等于辅
助栈中的元素个数。
先放C++代码,思路简单易懂。

class MinStack {
public:
/** initialize your data structure here. */
stack data, help;
MinStack() {

}

void push(int x) {

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值