C語言 | Leetcode C語言題解之第218題天際線問題

題目:

題解:

struct pair {int first, second;
};struct Heap {struct pair* heap;int heapSize;bool (*cmp)(struct pair*, struct pair*);
};void init(struct Heap* obj, int n, bool (*cmp)(struct pair*, struct pair*)) {obj->heap = malloc(sizeof(struct pair) * (n + 1));obj->heapSize = 0;obj->cmp = cmp;
}bool cmp1(struct pair* a, struct pair* b) {return a->second < b->second;
}void swap(struct pair* a, struct pair* b) {struct pair tmp = *a;*a = *b, *b = tmp;
}void push(struct Heap* obj, int x, int y) {int p = ++(obj->heapSize), q = p >> 1;obj->heap[p] = (struct pair){x, y};while (q) {if (!obj->cmp(&(obj->heap[q]), &(obj->heap[p]))) {break;}swap(&(obj->heap[q]), &(obj->heap[p]));p = q, q = p >> 1;}
}void pop(struct Heap* obj) {swap(&(obj->heap[1]), &(obj->heap[(obj->heapSize)--]));int p = 1, q = p << 1;while (q <= obj->heapSize) {if (q + 1 <= obj->heapSize) {if (obj->cmp(&(obj->heap[q]), &(obj->heap[q + 1]))) {q++;}}if (!obj->cmp(&(obj->heap[p]), &(obj->heap[q]))) {break;}swap(&(obj->heap[q]), &(obj->heap[p]));p = q, q = p << 1;}
}struct pair top(struct Heap* obj) {return obj->heap[1];
}bool empty(struct Heap* obj) {return obj->heapSize == 0;
}int cmp(int* a, int* b) {return *a - *b;
}int** getSkyline(int** buildings, int buildingsSize, int* buildingsColSize, int* returnSize, int** returnColumnSizes) {int n = buildingsSize;struct Heap* heap = malloc(sizeof(struct Heap));init(heap, n << 1, cmp1);int boundaries[n << 1];for (int i = 0; i < n; i++) {boundaries[i << 1] = buildings[i][0];boundaries[i << 1 | 1] = buildings[i][1];}qsort(boundaries, n << 1, sizeof(int), cmp);int** ret = malloc(sizeof(int*) * (n << 1));*returnColumnSizes = malloc(sizeof(int) * (n << 1));*returnSize = 0;int idx = 0;for (int i = 0; i < (n << 1); i++) {int boundary = boundaries[i];while (idx < n && buildings[idx][0] <= boundary) {push(heap, buildings[idx][1], buildings[idx][2]);idx++;}while (!empty(heap) && top(heap).first <= boundary) {pop(heap);}int maxn = empty(heap) ? 0 : top(heap).second;if ((*returnSize) == 0 || maxn != ret[(*returnSize) - 1][1]) {int* tmp = malloc(sizeof(int) * 2);tmp[0] = boundary, tmp[1] = maxn;(*returnColumnSizes)[*returnSize] = 2;ret[(*returnSize)++] = tmp;}}return ret;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41229.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

調制信號識別系列 (一):基準模型

調制信號識別系列 (一)&#xff1a;基準模型 說明&#xff1a;本文包含對CNN和CNNLSTM基準模型的復現&#xff0c;模型架構參考下述兩篇文章 文章目錄 調制信號識別系列 (一)&#xff1a;基準模型一、論文1、DL-PR: Generalized automatic modulation classification method b…

軟件架構之操作系統

第 2 章操作系統 本章主要介紹操作系統的基本概念及其形成、發展歷史和主要類型&#xff0c;并指出操作系統的5 大管理功能。掌握操作系統原理的關鍵在于深入理解“一個觀點、兩條線索”。一個觀點是以資源管理的觀點來定義操作系統&#xff1b;兩條線索是指操作系統如何管理計…

【計算機畢業設計】020基于weixin小程序訂餐系統

&#x1f64a;作者簡介&#xff1a;擁有多年開發工作經驗&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。&#x1f339;贈送計算機畢業設計600個選題excel文件&#xff0c;幫助大學選題。贈送開題報告模板&#xff…

C語言獲取當前時間

一共有兩段代碼&#xff0c;一個是獲取當前時間&#xff0c;一個是獲取到現在的總毫秒數 求關注&#x1f604; 互粉必回 獲取當前時間 #include <stdio.h> #include <time.h> int main() { time_t rawtime; struct tm * timeinfo; char buffer[20]; // 獲取當前…

Linux內核編譯與調試menuos-linux-3.18.6-在ubuntu20.04環境

1 具體操作 下載 linux-3.18.6內核 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz解壓進入linux-3.18.6文件夾 tar -xvf linux-3.18.6.tar.xz cd linux-3.18.6/編譯 #make x86_64_defconfig # 為x86_64生成配置 #make alldefconfig make i3…

每天一個數據分析題(四百零十)- 主成分

實際應用中&#xff0c;關于主成分數量K的取值&#xff0c;下列說法錯誤的是&#xff08; &#xff09; A. 可以基于碎石圖進行判斷 B. 特征根從大到小排序&#xff0c;通常要求前 K 個特征根都大于 1 C. 通常要求 K 個主成分的累積方差比超過 80% D. 各個主成分之間的方向…

什么是區塊鏈的“智能合約”

區塊鏈的“智能合約”是一種存儲在區塊鏈上的計算機協議&#xff0c;它能夠自動執行合約條款&#xff0c;并在滿足預設條件時自動執行相關操作。智能合約通過編程語言&#xff08;如Solidity&#xff09;編寫&#xff0c;可以在去中心化的環境中運行&#xff0c;無需人工干預。…

spdlog一個非常好用的C++日志庫(七): 源碼分析之異常類spdlog_ex

目錄 1.自定義異常類spdlog_ex 1.1.通用異常 1.2.系統調用異常 1.3.what()函數 2.異常的使用 2.1.拋出異常 2.2.控制異常使用 1.自定義異常類spdlog_ex 標準庫異常類&#xff08;std::exception&#xff09;系列&#xff0c;能滿足大多數使用異常的場景&#xff0c;但對…

100359.統計X和Y頻數相等的子矩陣數量

1.題目描述 給你一個二維字符矩陣 grid&#xff0c;其中 grid[i][j] 可能是 X、Y 或 .&#xff0c;返回滿足以下條件的子矩陣數量&#xff1a; 包含 grid[0][0]X 和 Y 的頻數相等。至少包含一個 X。 示例 1&#xff1a; 輸入&#xff1a; grid [["X","Y",…

Avalonia中的樣式

文章目錄 前言樣式定義代碼切換樣式樣式主題前言 Avalonia的樣式是Styles,與WPF類似。用于在控件之間共享屬性設置用于在控件之間共享屬性設置,樣式由 Selector和屬性組成。 樣式定義 下面定義一個最簡單的樣式 <Window.Styles><Style Selector="TextBlock…

雙 Token 無感刷新機制實現

?作者簡介&#xff1a;熱愛Java后端開發的一名學習者&#xff0c;大家可以跟我一起討論各種問題喔。 &#x1f34e;個人主頁&#xff1a;Hhzzy99 &#x1f34a;個人信條&#xff1a;堅持就是勝利&#xff01; &#x1f49e;當前專欄&#xff1a;項目實踐 &#x1f96d;本文內容…

微信小程序性能與體驗優化

1. 合理的設置可點擊元素的響應區域大小&#xff1b; 比較常見的是頁面的點擊按鈕太小&#xff0c;用戶點擊不到按鈕&#xff0c;這樣用戶體驗很不好。 2. 避免渲染頁面耗時過長&#xff1b; 當頁面渲染時間過長的話&#xff0c;會讓用戶感覺非常卡頓&#xff0c;當出現這種…

密室逃脫——收集版修改測試

一、原版修改 1、導入資源 Unity Learn | 3D Beginner: Complete Project | URP 2、設置Scene 刪除SampleScene&#xff0c;打開UnityTechnologies-3DBeginnerComplete下的MainScene 3、降低音量 (1) 打開Hierarchy面板上的Audio降低音量 (2) 打開Prefabs文件夾&#xf…

lnmp php7 安裝ssh2擴展

安裝ssh2擴展前必須安裝libssh2包 下載地址: wget http://www.libssh2.org/download/libssh2-1.11.0.tar.gzwget http://pecl.php.net/get/ssh2-1.4.tgz &#xff08;這里要換成最新的版本&#xff09; 先安裝 libssh2 再安裝 SSH2: tar -zxvf libssh2-1.11.0.tar.gzcd libss…

若依框架(RuoYi)中實現部門及子部門用戶查詢的SQL邏輯解析

前言 在基于若依框架&#xff08;RuoYi&#xff09;的項目開發中&#xff0c;經常會遇到需要根據部門ID查詢其下屬所有用戶的需求&#xff0c;包括直接隸屬于該部門的用戶以及屬于其子部門的所有用戶。這一需求在組織架構管理、權限分配等場景中尤為常見。本文將深入解析一段典…

【深入理解計算機系統——2信息的表示和處理】

計算機的本質就是二進制&#xff0c;0/1&#xff0c;稱之為bit&#xff08;位&#xff09;&#xff0c;一個位沒有什么意義&#xff0c;當同時擁有多個位&#xff0c;并且加上某種解釋&#xff0c;就可以表示任何有限集合的元素。&#xff08;為什么是有限&#xff1f;因為用bi…

【日志信息管理】管理日志信息的類

日志用于記錄程序的執行記錄包括程序的出錯記錄&#xff0c;程序致命退出原因&#xff0c;程序的正常執行記錄。這樣我們就可以很快的察覺程序的錯誤原因、執行狀況等等&#xff0c;因此管理日志信息是非常重要的。 日志一般由以下部分組合&#xff1a; 日志時間、日志等級、…

Java 基礎--File - IO流(2)

I/O流 定義 數據從硬盤流向內存為輸入流&#xff0c;數據從內存流向硬盤為輸出流。輸入也叫讀取數據&#xff0c;輸出也叫寫出數據。 IO分類 1.按照數據的流向分為&#xff1a;輸入流和輸出流 ①輸入流&#xff1a;把數據從其他設備上讀取到內存中的流 ②輸出流&#xff1…

Qt 基礎組件速學 事件過濾器

學習目標&#xff1a;理解事件過濾器 前置環境 運行環境:qt creator 4.12 學習內容和效果演示&#xff1a; Qt 提供了事件過濾器的機制,允許我們在事件到達目標對象之前對事件進行攔截和處理。這在以下情況下非常有用: 全局事件處理: 我們可以在應用程序級別安裝一個事件過…

工控人最愛的PLC觸摸屏一體機,有多香

PLC觸摸屏一體機是什么 PLC觸摸屏一體機&#xff0c;聽起來可能有點技術化&#xff0c;但簡單來說&#xff0c;它就是一個集成了可編程邏輯控制器&#xff08;PLC&#xff09;和觸摸屏的智能設備。這種設備不僅能夠執行自動化控制任務&#xff0c;還能實時顯示和操作設備狀態&a…