6.4 note

構造矩陣


class Solution {
private:
? ? vector<int> empty = {};
? ? // 返回每個數字(-1)所在的序號,可以是行或列, 如果為空則無效
? ? vector<int> topoSort(int k, vector<vector<int>>& conditions)
? ? {
? ? ? ? // 構建一個圖: 范圍1-k,這里故意留一個0空著,后續計算無需額外-1
? ? ? ? vector<vector<int>> g(k+1);
? ? ? ? // 入度: 范圍1-k,這里故意留一個0空著,后續計算無需額外-1
? ? ? ? // vector<int> inDegrees(k+1);
? ? ? ? int inDegrees[k+1];
? ? ? ? memset(inDegrees, 0, sizeof(inDegrees));
? ? ? ? for (vector<int>& condition : conditions)
? ? ? ? {
? ? ? ? ? ? g[condition[0]].push_back(condition[1]);
? ? ? ? ? ? ++inDegrees[condition[1]];
? ? ? ? }

? ? ? ? // 拓撲排序使用隊列
? ? ? ? queue<int> q;
? ? ? ? // 插入入度為0的節點
? ? ? ? for (int i = 1; i <= k; ++i)
? ? ? ? {
? ? ? ? ? ? if (inDegrees[i] == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? q.push(i);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 計算找到接點的序號:即優先級順序
? ? ? ? int seq = 0;
? ? ? ? // 返回結果
? ? ? ? vector<int> res(k);
? ? ? ? while (q.size() > 0)
? ? ? ? {
? ? ? ? ? ? int curr = q.front();
? ? ? ? ? ? q.pop();
? ? ? ? ? ? res[curr-1] = seq++;
? ? ? ? ? ? for (int next : g[curr])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (--inDegrees[next] == 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? q.push(next);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? // 找不到則返回空
? ? ? ? return seq == k ? res : empty;
? ? }

public:
? ? vector<vector<int>> buildMatrix(int k, vector<vector<int>>& rowConditions, vector<vector<int>>& colConditions) {
? ? ? ? vector<int> rows = topoSort(k, rowConditions);
? ? ? ? vector<int> cols = topoSort(k, colConditions);
? ? ? ? // 一旦發現有空的情況(即無法滿足條件),就可以直接返回空
? ? ? ? if (rows.size() == 0 || cols.size() == 0)
? ? ? ? {
? ? ? ? ? ? return {};
? ? ? ? }

? ? ? ? vector<vector<int>> res(k, vector<int>(k));
? ? ? ? for (int i = 0; i < k; ++i)
? ? ? ? {
? ? ? ? ? ? // 這里需要額外+1,因為編號是 0~k-1
? ? ? ? ? ? res[rows[i]][cols[i]] = i+1;
? ? ? ? }

? ? ? ? return res;
? ? ?}
};
?

雙指針?找規律

要改變的最小次數就等于中值,可以通過兩端做差再除以2得到最小的變化次數,

然后迭代下去即可,具體實參看代碼,時間復雜度O(n)

代碼:

class Solution {
public:
? ? int minOperations(int n) {
? ? ? ? int start = 0;
? ? ? ? int end = n-1;
? ? ? ? int res = 0;
? ? ? ? while(start<end){? ? ?//len長奇偶都無關
? ? ? ? ? ? res+=((end*2-1)-(start*2-1))/2;
? ? ? ? ? ? start++;
? ? ? ? ? ? end--;
? ? ? ? }
? ? ? ? return res;
? ? }
};

算法

1. 計算機編程語言是人類和計算機交流的語言工具。

2. 計算機的本質是狀態機,內存里存儲的所有數據構成了當前的狀態;

3. 數據結構相當于告訴計算機怎么來記錄當前的狀態,算法相當于告訴計算機怎么根據當前的狀態計算出下一個狀態。

4. 空間復雜度就是你需要的必需存儲的狀態最多有多少;

5. 時間復雜度就是從初始狀態到達最終狀態中間需要多少步,這個和算法強相關,是算法關注的事情;

6. 程序在計算過程中,將問題層層分解之后,會有大量的中間過程數據,這個本質上就是記錄問題的中間狀態;中間過程數據就是由你設計的數據結 構來承載。

cpp性能優化

?單線程下, 智能指針作為參數傳遞的時候沒有使用引用 ?每次都拷貝構造 造成了額外的 性能開銷 。

只要是個類型變量都可以傳參,例如share_ptr

?

錯誤貪心 lc3458

class Solution {

public:

? ? bool maxSubstringLength(string s, int k) {

? ? ? ? unordered_map<char,int> hash;

? ? ? ? for(auto c:s)

? ? ? ? ? ? hash[c]++;

? ? ? ? int cnt=0;

? ? ? ? for(auto& [a,b]:hash)

? ? ? ? {

? ? ? ? ? ? if(b==1) cnt++;

? ? ? ? }

? ? ? ? if(cnt>=k) return true;

? ? ? ? else return false;

? ? }

};

?

正確貪心:

class Solution {
public:
? ? bool maxSubstringLength(string s, int K) {
? ? ? ? int n = s.size();

? ? ? ? vector<int> pos[26];
? ? ? ? for (int i = 0; i < n; i++) {
? ? ? ? ? ? int c = s[i] - 'a';
? ? ? ? ? ? pos[c].push_back(i);
? ? ? ? }

? ? ? ? typedef pair<int, int> pii;
? ? ? ? vector<pii> vec;
? ? ? ? // 枚舉每一種子串
? ? ? ? for (int i = 0; i < 26; i++) if (!pos[i].empty()) {
? ? ? ? ? ? // 一開始先用這種字母的范圍作為子串的范圍
? ? ? ? ? ? int l = pos[i][0], r = pos[i].back();
? ? ? ? ? ? bool flag = true;
? ? ? ? ? ? while (flag) {
? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? // 檢查子串里是否出現了其它字母
? ? ? ? ? ? ? ? for (int j = 0; j < 26; j++) {
? ? ? ? ? ? ? ? ? ? int cnt = upper_bound(pos[j].begin(), pos[j].end(), r) - lower_bound(pos[j].begin(), pos[j].end(), l);
? ? ? ? ? ? ? ? ? ? if (cnt > 0 && cnt < pos[j].size()) {
? ? ? ? ? ? ? ? ? ? ? ? // 有一種字母沒有被完全包含,用它的范圍更新子串的范圍
? ? ? ? ? ? ? ? ? ? ? ? l = min(l, pos[j][0]);
? ? ? ? ? ? ? ? ? ? ? ? r = max(r, pos[j].back());
? ? ? ? ? ? ? ? ? ? ? ? flag = true;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? // 得到了這種子串里的最短子串
? ? ? ? ? ? if (l > 0 || r < n - 1) vec.push_back({r, l});
? ? ? ? }

? ? ? ? // leetcode 435. 無重疊區間
? ? ? ? sort(vec.begin(), vec.end());
? ? ? ? int R = -1, cnt = 0;
? ? ? ? for (pii p : vec) if (p.second > R) {
? ? ? ? ? ? R = p.first;
? ? ? ? ? ? cnt++;
? ? ? ? }
? ? ? ? return cnt >= K;
? ? }
};

?

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

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

相關文章

SCSS 全面深度解析

一、SCSS 入門指南&#xff1a;為你的 CSS 工作流注入超能力 在現代 Web 開發中&#xff0c;樣式表的復雜性和維護成本日益增加。為了應對這一挑戰&#xff0c;CSS 預處理器應運而生&#xff0c;而 SCSS (Sassy CSS) 正是其中最流行、最強大的工具之一。本指南將帶你深入了解 …

R1-Searcher++新突破!強化學習如何賦能大模型動態知識獲取?

R1-Searcher新突破&#xff01;強化學習如何賦能大模型動態知識獲取&#xff1f; 大語言模型&#xff08;LLM&#xff09;雖強大卻易因靜態知識產生幻覺&#xff0c;檢索增強生成&#xff08;RAG&#xff09;技術成破局關鍵。本文將解讀R1-Searcher框架&#xff0c;看其如何通…

圖神經網絡原理及應用簡介

圖神經網絡&#xff08;Graph Neural Networks, GNNs&#xff09;原理及應用 1. 圖神經網絡的基本概念 圖神經網絡是一種專門用于處理圖結構數據的深度學習模型。圖&#xff08;Graph&#xff09;由節點&#xff08;Node&#xff09;和邊&#xff08;Edge&#xff09;組成&…

Unity 限制物體在Bounds 包圍盒控制移動

我列舉兩種方式&#xff0c;其實最終都是涉及到包圍盒使用問題。可以通過 Box Collider 的 bounds 屬性來獲取物體的包圍盒&#xff08;Bounds&#xff09;也可以直接設置Bounds包圍盒使用&#xff0c;從而限制其移動范圍。不過需要注意&#xff0c;直接使用 Box Collider 的 s…

SpringBoot中緩存@Cacheable出錯

SpringBoot中使用Cacheable: 錯誤代碼&#xff1a; Cacheable(value "FrontAdvertiseVOList", keyGenerator "cacheKey") Override public List<FrontAdvertiseVO> getFrontAdvertiseVOList(Integer count) {return this.list(Wrappers.<Adve…

位集合(STL bitset)簡介

【bitset 官方網址】 https://cplusplus.com/reference/bitset/bitset/ 位集合&#xff08;Bit Set&#xff09;是一種高效存儲和操作布爾值&#xff08;true/false&#xff09;或二進制位&#xff08;0/1&#xff09;的數據結構&#xff0c;主要用于處理大規模整數集合或狀態標…

基于SDN環境下的DDoS異常攻擊的檢測與緩解

參考以下兩篇博客&#xff0c;最后成功&#xff1a; 基于SDN的DDoS攻擊檢測和防御方法_基于sdn的ddos攻擊檢測與防御-CSDN博客 利用mininet模擬SDN架構并進行DDoS攻擊與防御模擬&#xff08;Ryumininetsflowpostman&#xff09;_mininet模擬dos攻擊-CSDN博客 需求 H2 模擬f…

責任鏈模式:構建靈活可擴展的請求處理體系(Java 實現詳解)

一、責任鏈模式核心概念解析 &#xff08;一&#xff09;模式定義與本質 責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;是一種行為型設計模式&#xff0c;其核心思想是將多個處理者對象連成一條鏈&#xff0c;并沿著這條鏈傳遞請求&#xff0c;直到有某…

如何進行頁面前端監控

&#x1f9d1;?&#x1f4bb; 寫在開頭 點贊 收藏 學會&#x1f923;&#x1f923;&#x1f923; 前端監控主要分三個方向 前端性能&#xff08;用戶體驗優化&#xff09; 異常監控 業務指標跟 下面我來分別介紹三類指標如何獲取 1&#xff09;前端性能指標&#xff1a; …

Ajax技術分析方法全解:從基礎到企業級實踐(2025最新版)

引言 Ajax技術自2005年正式命名以來,已支撐全球83%的Web應用實現異步交互。2025年最新數據顯示,單頁面應用(SPA)的Ajax請求密度已達日均120億次/應用。本文將系統化解析Ajax分析方法論,涵蓋從基礎原理到企業級工程實踐的完整技術棧。 一、Ajax技術架構解構 1.1 核心組件…

git管理github上的repository

1. 首先注冊github并創建一個倉庫&#xff0c;這個很簡單&#xff0c;網上教程也很多&#xff0c;就不展開說了 2. 安裝git&#xff0c;這個也很簡單&#xff0c;不過這里有個問題就是你當前windows的用戶名即&#xff1a;C/Users/xxx 這個路徑不要有中文&#xff0c;因為git …

Windows 下部署 SUNA 項目:虛擬環境嘗試與最終方案

#工作記錄 #回顧總結 本文記錄了在 Windows 系統上&#xff0c;通過 PyCharm 圖形界面&#xff08;盡量減少命令行操作&#xff09;部署 SUNA 項目時&#xff0c;針對不同虛擬環境方案的嘗試過程、遇到的問題以及最終選擇的可行方案&#xff0c;并補充了整體部署思路與推薦。…

無向圖的點、邊雙連通分量

文章目錄 點雙連通分量邊雙連通分量 有向圖的強連通分量&#xff1a;寒假學習筆記【匠心制作&#xff0c;圖文并茂】——1.20拓撲、強連通分量、縮點 點雙連通分量 在這之前&#xff0c;先讓我們了解幾個概念。 割點&#xff1a;刪除一個點和其連出的邊后&#xff0c;原圖會…

第六十二節:深度學習-加載 TensorFlow/PyTorch/Caffe 模型

在計算機視覺領域,OpenCV的DNN(深度神經網絡)模塊正逐漸成為輕量級模型部署的利器。本文將深入探討如何利用OpenCV加載和運行三大主流框架(TensorFlow、PyTorch、Caffe)訓練的模型,并提供完整的代碼實現和優化技巧。 一、OpenCV DNN模塊的核心優勢 OpenCV的DNN模塊自3.3…

Spring @Autowired自動裝配的實現機制

Spring Autowired自動裝配的實現機制 Autowired 注解實現原理詳解一、Autowired 注解定義二、Qualifier 注解輔助指定 Bean 名稱三、BeanFactory&#xff1a;按類型獲取 Bean四、注入邏輯實現五、小結 源碼見&#xff1a;mini-spring Autowired 注解實現原理詳解 Autowired 的…

勝牌?全球成為2026年FIFA世界杯?官方贊助商

勝牌全球將首次與國際足聯&#xff08;FIFA&#xff09;旗艦賽事建立合作關系。 此次贊助恰逢美國首個潤滑油品牌即將迎來160周年之際&#xff0c;其國際擴張步伐正在加快。 在這項全球頂級賽事籌備期間&#xff0c;勝牌全球將通過各種富有創意的零售和體驗活動與球迷互動。 …

YOLOV7改進之融合深淺下采樣模塊(DSD Module)和輕量特征融合模塊(LFI Module)

目錄 一、研究背景? 二. 核心創新點? ?2.1 避免高MAC操作? ?2.2 DSDM-LFIM主干網絡? 2.3 P2小目標檢測分支? ?3. 代碼復現指南? 環境配置 關鍵修改點 ?4. 實驗結果對比? 4.1 VisDrone數據集性能 4.2 邊緣設備部署 4.3 檢測效果可視化 ?5. 應用場景? …

【C/C++】chrono簡單使用場景

chrono使用場景舉例 1 輸出格式化字符串 示例代碼 auto now std::chrono::system_clock::now(); auto t std::chrono::system_clock::to_time_t(now); auto ms std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;std::ostrin…

Med-R1論文閱讀理解-1

論文總結&#xff1a;Med-R1: Reinforcement Learning for Generalizable Medical Reasoning in Vision-Language Models 論文寫了什么&#xff1f; 本文提出了一種名為 Med-R1 的新框架&#xff0c;旨在通過強化學習&#xff08;Reinforcement Learning, RL&#xff09;提升…

京東熱點緩存探測系統JDhotkey架構剖析

熱點探測使用場景 MySQL 中被頻繁訪問的數據 &#xff0c;如熱門商品的主鍵 IdRedis 緩存中被密集訪問的 Key&#xff0c;如熱門商品的詳情需要 get goods$Id惡意攻擊或機器人爬蟲的請求信息&#xff0c;如特定標識的 userId、機器 IP頻繁被訪問的接口地址&#xff0c;如獲取用…