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

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

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

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.lryc.cn/news/536713.html

相关文章:

  • 硬修复(hPPR)与软修复(sPPR)
  • filebeat抓取nginx日志
  • TLQ-CN10.0.2.0 (TongLINK/Q-CN 集群)部署指引 (by lqw)
  • 第 14 天:UE5 C++ 与蓝图(Blueprint)交互!
  • 小初高各学科教材,PDF电子版下载
  • Trader Joe‘s EDI 需求分析
  • python class详解
  • 基于LVS负载均衡练习
  • 在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址
  • 数组_二分查找
  • VUE环境搭建
  • MATLAB图像处理:Sobel、Roberts、Canny等边缘检测算子
  • C++ 标准库常见容器
  • Ubuntu+Laravel+MQ+Supervisor队列系统搭建流程
  • 力扣100. 相同的树(利用分解思想解决)
  • 全面了解HTTP(一)
  • element-ui时间组件同一个月内选择/30天内选择
  • NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)
  • 深入浅出Java反射:掌握动态编程的艺术
  • 大模型被偷家?CNN结合多模态!
  • UI自动化测试的优缺点?
  • 在 Kubernetes (K8s) 环境中,备份 PostgreSQL 数据库
  • 机器视觉中的3d和2d的区别
  • exr 格式下 全景图(经纬图、panorama)转 cubemap
  • STM32 ADC介绍(硬件原理篇)
  • snort3.0 获取注册规则(19000多条)
  • 【GitHub】装修个人主页
  • 名词解释:npm,cnpm,yarn,vite,vue,electron
  • XMOS的多项音频技术创新将大模型与边缘AI应用密切联系形成生态化合
  • 九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表