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

力扣 23 912题(堆)

排序数组


链接:https://leetcode.cn/problems/sort-an-array/


堆排序 模板题


code

void swap(int* nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;
}void heapinsert(int* nums, int i) {while(nums[i] > nums[(i - 1) / 2]) {swap(nums, i, (i - 1) / 2);i = (i - 1) / 2;}
}void heapify(int* nums, int i, int size) {int l = i * 2 + 1;while(l < size) {int best = l + 1 < size && nums[l + 1] > nums[l] ? l + 1 : l;best = nums[best] > nums[i] ? best : i;if(best == i) break;swap(nums, i, best);i = best;l = i * 2 + 1;}
}// 自顶向底
void heapsort1(int* nums, int n) {for (int i = 0; i < n; i++) {heapinsert(nums, i);}int size = n;while (size > 1) {swap(nums, 0, --size);heapify(nums, 0, size);}
}// 自底向顶
void heapsort2(int* nums, int n) {for (int i = n - 1; i >= 0; i--) {heapify(nums, i, n);}int size = n;while (size > 1) {swap(nums, 0, --size);heapify(nums, 0, size);}
}int* sortArray(int* nums, int numsSize, int* returnSize) {*returnSize = numsSize;int* result = (int*)malloc(numsSize * sizeof(int));memcpy(result, nums, sizeof(int) * numsSize);heapsort2(result, numsSize);return result;
}

合并 K 个升序链表


链接:https://leetcode.cn/problems/merge-k-sorted-lists/


小根堆 认为是优解(打败100%,其实模板还是一样的,中心就是两个函数)


code

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* heap[10001];
int heap_size;void swap(int i, int j) {struct ListNode* temp = heap[i];heap[i] = heap[j];heap[j] = temp;
}void heapInsert(struct ListNode* node) {if (node == NULL) return;heap[++heap_size] = node;int i = heap_size;while (i > 1 && heap[i]->val < heap[i>>1]->val) {swap(i, i>>1);i >>= 1;}
}void heapify(int i) {int l = i<<1;while(l <= heap_size) {int best = l + 1 <= heap_size && heap[l + 1]->val < heap[l]->val ? l + 1 : l;best = heap[best]->val < heap[i]->val ? best : i;if(best == i) break;swap(i, best);i = best;l = i<<1;}
}struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) {struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));    // 虚拟节点dummy->next = NULL;                                                           struct ListNode* rear = dummy;heap_size = 0;for (int i = 0; i < listsSize; i++) {if (lists[i] != NULL) {heapInsert(lists[i]);}}while (heap_size > 0) {struct ListNode* min_node = heap[1];rear->next = min_node;rear = rear->next;if (min_node->next != NULL) {heap[1] = heap[1]->next;heapify(1);} else {heap[1] = heap[heap_size--];if (heap_size > 0) {heapify(1);}}}rear->next = NULL; struct ListNode* result = dummy->next;free(dummy);return result;
}

小注意写法上有关 父亲节点 与 左右儿子 节点的不同:https://www.doubao.com/thread/w3aff8c5c4f57b3e7
有关虚拟节点:https://www.doubao.com/thread/w28edad0cbeefef52

http://www.dtcms.com/a/361394.html

相关文章:

  • MySQL 体系结构
  • 09.《路由基础知识解析和实践》
  • 【C#实战】使用ListBox控件与生成器模式构建灵活多变的金融资产管理系统
  • 金融数据安全
  • 云原生新手入门完整学习指南
  • 基于单片机智能家居语音控制系统
  • 《IC验证必看|随机稳定性 / 再现性》
  • 手把手教你搭建 UDP 多人聊天室(附完整源码)
  • 网络层和数据链路层
  • 【LeetCode热题100道笔记+动画】乘积最大子数组
  • 构建深度学习音频识别模型:从数据预处理到性能评估
  • PitVis-2023挑战赛:内镜下垂体瘤手术视频中的手术流程识别|文献速递-深度学习人工智能医疗图像
  • 1. 从零开始搭建微服务架构1.0(登录模块)
  • 安科瑞微电网智慧能源平台:构建源网荷储一体化新型电力系统
  • RAG初筛混合方案 - bm25+vector
  • 大规模异构数据挖掘与数据架构
  • 56_基于深度学习的X光安检危险物品检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 无需服务器也能建网站:Docsify+cpolar让技术文档分享像写笔记一样简单
  • Typescript入门-泛型讲解
  • Ansible 变量全解析与实践
  • UniApp + SignalR + Asp.net Core 做一个聊天IM,含emoji 表情包
  • 53_基于深度学习的野生菌菇检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 通义灵码+支付 MCP:30 分钟实现创作打赏智能体
  • 【算法】124.二叉树中的最大路径和--通俗讲解
  • React前端开发笔记合集
  • Kubernetes集群升级与etcd备份恢复指南
  • 【系统架构设计(七)】 需求工程之:面向对象需求分析方法:统一建模语言(UML)(下)
  • 2025年工作后值得考的财会行业证书推荐,尤其是第二个!
  • 光颉(Viking)电阻CS25FTFR008 1225 0.008R/8mR 3W 1%介绍-华年商城
  • 中心扩展算法