TikTok真題第1天 | 666.路徑和IV、 207.課程表、210.課程表||

666.路徑和IV

題目鏈接:666.路徑和IV

解法:

參考這篇題解:【LeetCode - 666】路徑和 IV_力扣666路徑總和4-CSDN博客

關鍵點在于:

(1)使用map來存node:key 為整數的前兩位,value 為整數的后一位,即 key 為位置信息,value 為權值,KV是(num / 10, num % 10);

(2)左右子樹的表示:對于某一個節點來說,如果它的深度為depth,位置編號為 pos,那么它的左子節點的深度為depth+1,位置編號為 pos?× 2 - 1,那么key就是 (depth+1) * 10 + pos*2-1。而它的右子節點的pos和key都是左子節點的加1;

(3)如果左子節點和右子節點均不在 map 中,說明一條路徑計算完畢,ans += sum;

(4)如果兩個子節點中有一個不在map中,那么dfs會直接對該子節點return,否則繼續dfs。

邊界條件:左子樹或者右子樹為空。

時間復雜度:O(n)

空間復雜度:O(n)

class Solution {int ans = 0;// 使用unordered_map,插入、刪除和查找的平均時間復雜度為O(1)// 而map是有序的,這三種操作為O(logn)unordered_map<int,int> map;public:int pathSum(vector<int>& nums) {for (int num: nums) {map[num / 10] = num % 10;}dfs(nums[0]/10, 0);return ans;}private:void dfs(int node, int sum) {auto it = map.find(node);if (it == map.end()) {return;}sum += it->second;int depth = node / 10;int pos = node % 10;int left = (depth + 1) * 10 + pos * 2 - 1;int right = left + 1;if (map.find(left)==map.end() && map.find(right)==map.end()) {ans += sum;} else {dfs(left, sum);dfs(right, sum);}}
};

207.課程表

題目鏈接:207.course-schedule

解法:

兩種解法,bfs和dfs。

bfs:需要提前計算所有課的入度和先修課的鄰接表,入度為0的課意味著沒有任何先修課,可以先選。剩下的看題解,這篇題解寫得很好:bfs題解。

代碼的實現參考這篇題解:bfs代碼

dfs:在構造鄰接表時,有的答案是把先修課作為vector的索引或者map的key,也有的把先修課作為vector的元素。這里按前一種,把先修課作為vector的索引,得從先修課開始選,根據先修課再去遍歷以它為前置條件的課程,直到搜索到某門課不是任何課程的先修課,說明從當前課開始dfs的路徑,是有限無環的。

以下題解來自eetcode中文區:dfs代碼

邊界條件:

時間復雜度 O(N+M): 遍歷一個圖需要訪問所有節點和所有臨邊,N?和 M分別為節點數量和臨邊數量;
空間復雜度 O(N+M): 為建立鄰接表所需額外空間,adjacency 長度為 N?,并存儲 M條臨邊的數據。

// bfs
class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> adjacency(numCourses);vector<int> indegrees(numCourses, 0);queue<int> que;for (const auto& cp:prerequisites) {adjacency[cp[1]].push_back(cp[0]);indegrees[cp[0]]++;}for (int i=0; i<numCourses; i++) {if (indegrees[i]==0) que.push(i);}while (!que.empty()) {int pre = que.front();que.pop();numCourses--;for (int cur: adjacency[pre]) {indegrees[cur]--;if (indegrees[cur]==0) que.push(cur);}}return numCourses == 0;}
};
// dfs
class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> adjacency(numCourses);vector<int> flags(numCourses, 0);for (const auto& cp:prerequisites) {adjacency[cp[1]].push_back(cp[0]);}for (int i=0; i<numCourses; i++) {if (!dfs(adjacency, flags, i)) return false;}return true;}private:bool dfs(const vector<vector<int>>& adjacency, vector<int>& flags, int i) {if (flags[i] == 1) return false;if (flags[i] == -1) return true;flags[i] = 1;for (int j: adjacency[i]) {if (!dfs(adjacency, flags, j)) return false;}flags[i] = -1;return true;}
};

210. 課程表||

題目鏈接:210.course-schedule-ii

解法:

與207幾乎一樣,代碼改動量很小。如果不先做207,那幾乎是搞不懂的。

dfs改動大一些,result需要翻轉一下,因為先修課是最后才加入列表的。

邊界條件:

時間復雜度:同207

空間復雜度:同207

// bfs
class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> adjacency(numCourses);vector<int> indegrees(numCourses, 0);queue<int> que;vector<int> result;for (const auto& cp:prerequisites) {adjacency[cp[1]].push_back(cp[0]);indegrees[cp[0]]++;}for (int i=0; i<numCourses; i++) {if (indegrees[i]==0) que.push(i);}while (!que.empty()) {int pre = que.front();que.pop();result.push_back(pre);for (int cur: adjacency[pre]) {indegrees[cur]--;if (indegrees[cur]==0) que.push(cur);}}if (result.size()!=numCourses) return {};return result;}
};
// dfs
class Solution {vector<int> result;public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>> adjacency(numCourses);vector<int> flags(numCourses, 0);for (const auto& cp:prerequisites) {adjacency[cp[1]].push_back(cp[0]);}for (int i=0; i<numCourses; i++) {if (!dfs(adjacency, flags, i)) return {};}// 要翻轉reverse(result.begin(), result.end());return result;}private:bool dfs(const vector<vector<int>>& adjacency, vector<int>& flags, int i) {if (flags[i] == 1) return false;if (flags[i] == -1) return true;flags[i] = 1;for (int j: adjacency[i]) {if (!dfs(adjacency, flags, j)) return false;}flags[i] = -1;result.push_back(i);return true;}
};

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

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

相關文章

導出Excel

2019獨角獸企業重金招聘Python工程師標準>>> 思路: 1, 引入Excel類庫; 2, 創建一個模板; 3, 將數據填充進去; 4, 生成文件; 下面是一個簡單的示例 $phpExcelObj new PHPExcel(); $titleMap self::TITLE_MAP; //設置表頭 $i 0; foreach ($titleMap as $key > $…

CentOS系統更換yum源(repomd.xml not found解決方案)

CentOS系統更換yum源 問題 當初瞎鼓搗服務器&#xff0c;更換yum源為aliyun的&#xff0c;奈何阿里的源最近全部打不開&#xff0c;導致yum安裝不了&#xff0c;一直報錯&#xff1a; http://mirrors.aliyun.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL E…

在類中用class時數據是共有還是私有_jvm學習筆記之class文件的加載、初始化

編寫的java文件在要真正運行時&#xff0c;會首先被編譯成 “.class"結尾的二進制文件&#xff0c;然后被虛擬機加載。那么在虛擬機中一個class文件要成為java實例&#xff0c;需要經歷好幾個步驟&#xff1a;1、裝載&#xff1a;裝載階段由三個基本動作完成&#xff0c;要…

所有前端都要看的2D游戲化互動入門基礎知識

背景現在越來越多的公司和APP開始使用游戲化的方式去做產品了&#xff0c;所謂游戲化&#xff0c;是指在非游戲環境中將游戲的思維和游戲的機制進行整合運用&#xff0c;以引導用戶互動和使用的方法。支付寶里面的螞蟻莊園、螞蟻森林&#xff0c;通過游戲和公益的結合實現用戶的…

江蘇一動物園現“旋轉活馬” 園方:創意來自馬術訓練

中新網南通1月31日電 (記者唐娟)“旋轉馬設備采用同時容納六匹馬的遛馬器組裝而成&#xff0c;對馬匹沒有任何傷害&#xff0c;初衷是希望給小朋友一種全新體驗&#xff0c;這才有了這個創意項目。”1月31日&#xff0c;針對活馬版“旋轉木馬”引發的熱議&#xff0c;江蘇南通森…

Byte數組轉換成string 的方法積累

.net的加密算法&#xff0c;返回的都是byte[] 類型&#xff0c;在存貯起來讓人非常頭疼&#xff0c;最簡單的方法就是把byte[]轉換成string來存貯&#xff0c;當然如果數據量大的話&#xff0c;另當別論。 所以我就把byte[]轉換成string的方法做一個簡單的積累與分析。目前有3種…

加快信息化建設對地方發展的_加快設計師職業發展的9種方法

加快信息化建設對地方發展的重點 (Top highlight)Over the past few months, I have had an increase in conversations with design students from various institutions, as well as early, to senior-level designers, researchers, & product managers from various co…

Docker:Nginx-Redis-Mysql-PHP 部署

Docker:Nginx-Redis-Mysql-PHP 部署 網絡橋接 Docker容器之間默認網絡隔離&#xff0c;需要使用橋接網絡進行互通 創建網絡 docker network create net-local docker network ls NETWORK ID NAME DRIVER SCOPE da9c8fc3dc80 bridge bridge local 78641…

epoll監聽文件_介紹一下 Android Handler 中的 epoll 機制?

介紹一下 Android Handler 中的 epoll 機制&#xff1f;目錄&#xff1a;IO 多路復用select、poll、epoll 對比epoll APIepoll 使用示例Handler 中的 epoll 源碼分析IO 多路復用IO 多路復用是一種同步 IO 模型&#xff0c;實現一個線程可以監視多個文件句柄。一旦某個文件句柄就…

前端工程師的一大神器——puppeteer

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦神器puppeteer&#xff0c;我猜有挺多人不知道。文章不長&#xff0c;看完有空也可以試玩。我18年也寫過一篇puppeteer爬取生成pdf的文章&#xff0c;時間真快。前端使用puppeteer 爬蟲…

selenium界面元素定位

一、 Selenium界面元素定位 本文元素定位以das2為例 #導入包 from selenium import webdriver #打開火狐驅動 driverwebdriver.Firefox() #訪問網址 driver.get("http://192.168.3.217:8080/das/seatlogin.jsp ") 進行web頁面自動化測試&#xff0c;對頁面上…

vue.js ui_UI / UX開發:考慮Vue.js

vue.js uiBecause sometimes we have to add logic to our concepts, and Vue makes it a whole lot easier.因為有時我們必須在概念中添加邏輯&#xff0c;而Vue使其變得更加容易。 FULL DISCLOSURE: THIS IS NOT A COMPLETE JAVASCRIPT OR VUE COURSE. There’s no way I co…

Silverlight學習筆記十七BingMap(三)之地圖的地區標識

如果我們需要在Bing Maps中加入一個小圖釘標記&#xff0c;該如何實現了&#xff1f; Bing Maps控件已經為我們提供了這個功能&#xff0c;在Microsoft.Maps.MapControl名稱空間下提供了實現圖釘應用的圖釘層Pushpin類用該類來實現普通標識 在Xaml中添加<map:Pushpin Locati…

win10查看pcie設備_壹拓網科技解密WIN10系統使用向日葵開機棒遠程開機需要設置幾個地方...

向日葵開機棒&#xff0c;是一款非常好用的遠程智能遠程開機硬件&#xff0c;它一頭接網線&#xff0c;另外一頭和被開電腦接在同一個路由器下&#xff0c;不需要和被開電腦或者設備直接連接&#xff0c;當然&#xff0c;被開電腦需要有線聯網&#xff0c;暫時不支持使用無線方…

如何成為公司獨當一面的工程師

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦黃老師的這篇文章&#xff0c;你可能看到過了&#xff0c;但值得再看一遍。之前常有小伙伴問&#xff0c;大多情況下我都會分享這篇文章。點擊下方卡片關注我、加個星標&#xff0c;或者…

webpack4.0配置記錄(2)

接上一篇webpack4.0配置記錄(1),繼續記錄學習webpack配置。 定義環境變量 new Webpack.DefinePlugin({//用來定義全局環境變量DEV:JSON.stringify(dev),FLAG:true }), webpack簡單優化 noParsemodule:{noParse:/jquery/,//不去解析設置的包所依賴的關系,如jquery } ignorePlugi…

flex如何做響應式設計_響應式設計-您做錯了!

flex如何做響應式設計Responsive design is not just about the web that automatically adjusts to different screen resolutions and resizeable images, but designs that are crucial for web performance.自適應設計不僅涉及可自動適應不同屏幕分辨率和可調整大小圖像的網…

怎么查看和獲取SQL Server實例名

查看實例名時可用 1、服務—SQL Server(實例名)&#xff0c;默認實例為(MSSQLSERVER) 或在連接企業管理時-查看本地實例 2、通過注冊表 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/InstalledInstance 3、用命令 sqlcmd/osql sqlcmd -L sqlcmd -Lc osql -L 獲…

30萬手表推薦_今年六十歲生日,兒子說要送只30萬的手表,請問有哪些推薦?...

關注腕表部落&#xff0c;盡享腕表生活一位讀者向筆者提出這樣一個問題&#xff1a;今年六十歲生日&#xff0c;兒子說要送只30萬的手表&#xff0c;請問有哪些推薦&#xff1f;首先要恭喜這位老爺子&#xff0c;一來是生日馬上就要到了&#xff0c;二來是還有這么孝順而且慷慨…

關注博客

https://blog.51cto.com/oldboyhttps://blog.51cto.com/yw666轉載于:https://blog.51cto.com/11732716/2348556