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

力扣 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.xdnf.cn/news/19473.html

相关文章:

  • JAVA 面试宝典02
  • 工业飞拍技术:高速生产线的 “动态抓拍神器”,到底牛在哪?
  • 20250829的学习笔记
  • 基于GCN图神经网络的光伏功率预测Matlab代码
  • Spark实现推荐系统中的相似度算法
  • Proteus 仿真 + STM32CubeMX 协同开发全教程:从配置到仿真一步到位
  • 盟接之桥说制造:守正出奇:在能力圈内稳健前行,以需求导向赢得市场
  • 基于51单片机220V交流电流检测系统过流阈值报警设计
  • 增强现实—Gated-attention architectures for task-oriented language grounding
  • 从零开始的python学习(九)P134+P135+P136+P137+P138+P139+P140
  • 【LeetCode热题100道笔记+动画】颜色分类
  • 【面试场景题】如何快速判断几十亿个数中是否存在某个数
  • python-pptx 库(最常用,适合生成/修改 PPT 文件)
  • 深入解析quiche开源项目:从QUIC协议到云原生实践
  • 大模型微调与LoRA/QLoRA方法解析
  • 四、练习1:Git基础操作
  • Python爬虫实战:研究Colormap,构建优质色彩方案数据采集和分析系统
  • 学习:uniapp全栈微信小程序vue3后台-暂时停更
  • C# Task 入门:让你的程序告别卡顿
  • 一文读懂k8s的pv与pvc原理
  • 【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案
  • 【Netty4核心原理⑭】【Netty 内存分配 ByteBuf❷】
  • 计算机组成原理1 组成与各部件流程 9.1
  • 国内服务器如何安装docker或者是1panel
  • 鸿蒙总改变字体大小设置
  • 计算机网络---https(超文本传输安全协议)
  • Kafka面试精讲 Day 4:Consumer消费者模型与消费组
  • SQLSERVER关键字
  • npm 打包上传命令,撤销错误版本
  • 智能核心:机器人芯片的科技革新与未来挑战