leetcode刷题第十天——栈与队列Ⅱ

news2025/2/15 8:21:40

本次刷题顺序是按照卡尔的代码随想录中给出的顺序

1047. 删除字符串中的所有相邻重复项

char* removeDuplicates(char* s) {
    int len = strlen(s);
    char* tmp = malloc(sizeof(char) * (len + 1));
    int top = -1, idx = 0;
    while(idx < len) {
        if(top == -1) tmp[++top] = s[idx];
        else {
            if(tmp[top] == s[idx]) top--;
            else tmp[++top] = s[idx];
        }
        idx++;
    }
    tmp[++top] = '\0';
    return tmp;
}

150. 逆波兰表达式求值

bool isNumber(char* ch) {
    if(strlen(ch) > 1 || '0' <= ch[0] && ch[0] <= '9') return true;
    else return false;
}

int evalRPN(char** tokens, int tokensSize) {
    int* st = malloc(sizeof(int)* tokensSize);
    int idx = 0, top = -1;
    while(idx < tokensSize) {
        char* ch = tokens[idx];
        if(!isNumber(ch)){
            switch(ch[0]) {
                case '+': st[top - 1] += st[top]; top--; break;
                case '-': st[top - 1] -= st[top]; top--; break;
                case '*': st[top - 1] *= st[top]; top--; break;
                case '/': st[top - 1] /= st[top]; top--; break;
            }
        }else {
            st[++top] = atoi(ch);
        }
        idx++;
    }
    return st[top];
}

347. 前 K 个高频元素

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

typedef struct {
    int key;
    int value;
    UT_hash_handle hh;
}hash;

typedef struct {
    int H_key;
    int H_value;
}Heap;

Heap* obj;
int Heap_size;

bool cmp(Heap obj1, Heap obj2) {
    return obj1.H_value < obj2.H_value;
}

void swap(Heap* obj1, Heap* obj2) {
    Heap tmp = *obj1;
    *obj1 = *obj2;
    *obj2 = tmp;
}

Heap H_Top() {
    return obj[1];
}

void H_Pop() {
    obj[1] = obj[Heap_size--];
    int idx = 1, t_idx;
    while((idx << 1) <= Heap_size) {//当前结点有子结点时,继续循环
        t_idx = idx << 1;
        if(t_idx < Heap_size && cmp(obj[t_idx + 1], obj[t_idx])) t_idx++;
        if(cmp(obj[idx], obj[t_idx])) return;
        swap(&obj[t_idx], &obj[idx]);
        idx = t_idx;
    }
}

void H_Push(hash x) {
    obj[++Heap_size].H_key = x.key;
    obj[Heap_size].H_value = x.value;
    int idx = Heap_size, t_idx;
    while(idx > 1) {
        t_idx = idx >> 1;
        if(cmp(obj[t_idx], obj[idx])) return;
        swap(&obj[t_idx], &obj[idx]);
        idx = t_idx;
    }
}

int* topKFrequent(int* nums, int numsSize, int k, int* returnSize) {
    hash* ha = NULL, * tmp1, * tmp2;
    int idx = 0;
    while(idx < numsSize) {//将数据信息存入哈希表
        HASH_FIND_INT(ha, &nums[idx], tmp1);
        if(tmp1 == NULL) {
            tmp1 = malloc(sizeof(hash));
            tmp1->key = nums[idx];
            tmp1->value = 1;
            HASH_ADD_INT(ha, key, tmp1);
        }else {
            tmp1->value++;
        }
        idx++;
    }

    obj = malloc(sizeof(Heap) * (k + 1));
    Heap_size = 0;
    Heap mid;

    HASH_ITER(hh, ha, tmp1, tmp2) {
        if (Heap_size == k) {
            mid = H_Top();
            if (mid.H_value < tmp1->value) {
                H_Pop();
                H_Push(*tmp1);
            }
        } else {
            H_Push(*tmp1);
        }
    }

    // 返回结果
    *returnSize = k;
    int* ret = malloc(sizeof(int) * k);
    for (int i = 0; i < k; i++) {
        mid = H_Top();
        H_Pop();
        ret[i] = mid.H_key;
    }
    return ret;
}

栈比较适合求解括号匹配、字符去重、逆波兰表达式

今天刷题,顺带复习了哈希表和小根堆的内容。小根堆和大根堆的思维框架是完全二叉树,所以使用数组实现小根堆时,有骚操作,在调整过程中,很妙,多看几遍H_Pop和H_Push的代码,好好体会

写这个系列的博客主要是给自己一个坚持刷题的理由,今天是第十天,感觉敲代码的流畅度有所提高,虽然思维上没有质变,但是相信坚持下去一定会有更大的收获,奥里给!

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

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

相关文章

Vulnhub靶机随笔-Hackable II

Vulnhub靶机Hackable II详解 攻击机Kali IP:192.168.1.6 靶机 IP:未知 系统:未知 A.信息收集 扫描靶机存活性 确定IP地址 1.命令:arp-scan -l 扫描靶机开放端口及其服务版本信息 2.命令:nmap -A -p- -sV 靶机IP 3.靶机开放三个端口: 21ftp端口:存在anonymous匿…

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…

【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】

在当今科技飞速发展的时代,人工智能早已不是一个陌生的词汇,它已经渗透到我们生活的方方面面,从智能语音助手到自动驾驶汽车,从图像识别到自然语言处理。而支撑这一切的核心技术之一,就是神经网络。作为机器学习领域的璀璨明星,神经网络已经在众多任务中取得了令人瞩目的…

宠物企业宣传网站静态模板 – 前端静态页面开发实例

该宠物宣传企业站是一个基于前端技术构建的静态网站&#xff0c;旨在为宠物行业的企业提供一个简洁、现代的在线展示平台。整个网站采用HTML、CSS和JavaScript三种技术&#xff0c;确保了良好的用户体验和页面表现。 前端技术&#xff1a; HTML&#xff1a;HTML负责构建网站的…

【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)——4.2 LSTM的引入与解决长期依赖问题的方法】

在人工智能的璀璨星空中,深度学习模型犹如一颗颗耀眼的星辰,引领着技术的革新。而在处理序列数据的领域中,循环神经网络(RNN)无疑是那颗最为亮眼的星星。然而,即便是这样强大的模型,也面临着一些棘手的问题,其中最突出的便是长期依赖问题。今天,我们就来深入探讨一下长…

el-input输入框样式修改

el-input输入框样式修改 目的&#xff1a;蓝色边框去掉、右下角黑色去掉(可能看不清楚) 之前我试过deep不行 最有效的办法就是就是在底部添加一下css文件 代码中针对input的type为textarea&#xff0c;对于非textarea&#xff0c;只需将下面的css样式中的textarea替换成input…

日常问题-pnpm install执行没有node_modules生成

日常问题-pnpm install执行没有node_modules生成 1.问题2.解决方法 1.问题 执行pnpm i后&#xff0c;提示Scope: all 3 workspace projects Done in 503ms&#xff0c;而且没有node_modules生成。很奇怪 2.解决方法 确保根目录有 pnpm-workspace.yaml 文件&#xff1a; 把这…

C++-----------酒店客房管理系统

酒店客房管理系统 要求&#xff1a; 1.客房信息管理:包括客房的编号、类型、价格、状态等信息的录入和修改; 2.顾客信息管理:包括顾客的基本信息、预订信息等的管理; 3.客房预订:客户可以根据需要进行客房的预订&#xff0c;系统会自动判断客房的可用情况; 4.入住管理:客户入住…

ORDER BY盲注攻击:原理、实现与防御(附Python多线程爆破脚本)

引言 在SQL注入攻击中&#xff0c;ORDER BY注入是一种容易被忽视但危害极大的漏洞类型。与传统的UNION或WHERE注入不同&#xff0c;ORDER BY参数通常无法直接返回查询结果&#xff0c;攻击者需要依赖**盲注&#xff08;Blind SQLi&#xff09;**技术逐字符提取数据。本文将结合…

人工智能在临床应用、药物研发以及患者护理等方面的最新研究进展|顶刊速递·25-02-12

小罗碎碎念 推文速览 第一篇文章提出 CRAFT-MD 框架评估临床大语言模型&#xff08;LLMs&#xff09;在医患互动任务中的表现&#xff0c;发现其存在局限性&#xff0c;并基于结果给出改进评估的建议。 第二篇文章全面阐述了 2019 年以来人工智能在小分子药物研发全流程&#…

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…

辛格迪客户案例 | 钥准医药科技GMP文件管理(DMS)项目

01 创新药企&#xff0c;崛起于启东 在我国医药行业蓬勃发展的浪潮中&#xff0c;钥准医药科技&#xff08;启东&#xff09;有限公司&#xff08;以下简称“钥准医药”&#xff09;犹如一颗冉冉升起的新星&#xff0c;闪耀着创新与活力的光芒。成立于2015年&#xff0c;钥准医…

Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲

Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲 dijkstra(堆优化版) 题目 https://www.programmercarl.com/kamacoder/0047.%E5%8F%82%E4%BC%9Adijkstra%E5%A0%86.html 小明参加科学大会 思路 思路 朴素版的dijkstra&#xff0c;时间复杂度为O(n^2)&am…

w208基于spring boot物流管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

望远镜成像系统--科学评价光学镜头

望远镜是一种利用透镜或反射镜以及其他光学器件观测遥远物体的光学仪器。其原理是通过透镜的折射或反射镜的反射&#xff0c;将光线聚焦成像&#xff0c;再经过一个放大目镜进行观察。日常生活中的光学望远镜又称“天文望远镜”。1608年&#xff0c;荷兰的一位眼镜商汉斯利伯希…

产品更新 | 华望M-Design 平台的AI 建模功能即将上线

前言 在 AI 技术加速发展的背景下&#xff0c;杭州华望系统科技有限公司在⼤语⾔模型与 SysML 标准进行深度结合的基础上&#xff0c;强力推出AI建模功能。该功能⽀持⽤户通过上传⽂档或对话交互等⽅式完成需求智能增强、模型动态构建与细节补充、实时获取结构化反馈等业务。⽬…

RabbitMQ 在 Spring Boot中使用方式

文章目录 作用MQ docker 安装MQ使用RabbitMQ的整体架构及核心概念&#xff1a;RabbitMQ的整体架构及核心概念&#xff1a;消费者消息推送限制交换机与队列## 项目使用MQDirect: 直连模式Fanout: 广播模式Topic: 主题模式Headers: 头信息模式 使用DEMO地址异常问题记录 作用 Ra…

HAL库框架学习总结

概述&#xff1a;HAL库为各种外设基本都配了三套 API&#xff0c;查询&#xff0c;中断和 DMA。 一、HAL库为外设初始化提供了一套框架&#xff0c;这里以串口为例进行说明&#xff0c;调用函数 HAL_UART_Init初始化串口&#xff0c;此函数就会调用 HAL_UART_MspInit&#xff0…

深入解析系统调用接口(System Call Interface, SCI)

在操作系统的世界中&#xff0c;用户态应用程序无法直接访问内核态资源&#xff0c;而必须通过一种受控的方式进行交互。这种方式就是系统调用&#xff08;System Call&#xff09;。系统调用接口&#xff08;System Call Interface, SCI&#xff09;是用户程序与操作系统内核之…

深入理解Linux网络随笔(一):内核是如何接收网络包的(下篇)

3、接收网络数据 3.1.1硬中断处理 数据帧从网线到达网卡时候&#xff0c;首先到达网卡的接收队列&#xff0c;网卡会在初始化时分配给自己的RingBuffer中寻找可用内存位置&#xff0c;寻找成功后将数据帧DMA到网卡关联的内存里&#xff0c;DMA操作完成后&#xff0c;网卡会向…