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.mzph.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