Leetcode刷题笔记--Hot61-70

1--课程表(207)

主要思路:

        用 in 记录每一门课程剩余的先修课程个数,当剩余先修课程个数为0时,将该课程加入到队列q中。

        每修队列q中的课程,以该课程作为先修课程的所有课程,其剩余先修课程个数减1;

        不断将剩余先修课程数为0的课程加入到队列q中,当队列为空时,若修的课程数等于总课程数,则返回true,否则返回false;

#include <iostream>
#include <vector>
#include <queue>class Solution {
public:bool canFinish(int numCourses, std::vector<std::vector<int>>& prerequisites) {std::vector<std::vector<int>> out; // 存储每一个先修课程对应的课程std::vector<int> in; // 存储每一个课程对应的剩余先修课程的个数std::queue<int> q; // 存储可以修的课程out.resize(numCourses);in.resize(numCourses);// 初始化for(auto pair : prerequisites){int cur = pair[0]; // 当前课程int pre = pair[1]; // 当前课程的先修课程out[pre].push_back(cur); // 初始化outin[cur]++;}// 选取可以直接修的课程加入到队列q中for(int i = 0; i < numCourses; i++){if(in[i] == 0) q.push(i);}int num = 0; // 已经修过的课程数while(!q.empty()){int tmp = q.front(); // 修弹出的课程q.pop();num++;// 以tmp作为先修课程的课程,其剩余的先修课程数减1for(auto course : out[tmp]){in[course] --;if(in[course] == 0) q.push(course); // course没有需要先修的课程了,因此可以加入到队列q中}}if(num == numCourses) return true;else return false;}
};int main(int argc, char* argv[]){// numCourses = 2, prerequisites = [[1,0],[0,1]]std::vector<std::vector<int>> test = {{1, 0}, {0, 1}};int numCourses = 2;Solution S1;bool res = S1.canFinish(numCourses, test);if(res) std::cout << "true" << std::endl;else std::cout << "false" << std::endl;return 0;
}

2--实现Trie(前缀树)

主要思路:

        参考之前的笔记:前缀树的实现

3--数组中的第K个最大的元素

主要思路:

        基于随机化的快排(即随机选取基准元素)划分数组,其时间复杂度为O(n);

        根据第K个最大的元素在哪一个数组,继续递归随机化快排,直到找到第K个最大的元素。

#include <iostream>
#include <vector>
#include <queue>class Solution {
public:int findKthLargest(std::vector<int>& nums, int k){return quickSelect(nums, k);}int quickSelect(std::vector<int>& nums, int k){std::vector<int> large;std::vector<int> equal;std::vector<int> less;// 随机选取基准元素int pivot = nums[rand() % nums.size()]; // 返回[0, nums.size()-1]范围内的一个随机数for(int num : nums){if(num > pivot) large.push_back(num);else if(num == pivot) equal.push_back(num);else less.push_back(num);}// large, equal, less// 第k大的元素在large中if(k <= large.size()) return quickSelect(large, k);// 第k大的元素在less中else if(k > (nums.size() - less.size())) return quickSelect(less, k-(nums.size() - less.size()));else return pivot;}
};int main(int argc, char *argv[]){ // [3, 2, 1, 5, 6, 4], k = 2std::vector<int> test = {3, 2, 1, 5, 6, 4};int k = 2;Solution S1;int res = S1.findKthLargest(test, k);std::cout << res << std::endl;return 0;
}

4--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes实战(三)-k8s节点设置cpu高于多少就不调度

1 k8s节点设置的概念和原理 k8s是Google开源的容器集群管理系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。在k8s中&#xff0c;Node是指容器运行的物理或虚拟机器。Node可以是一个物理机或一个虚拟机器&#xff0c;k8s通过其调度器将Pod调度到每个Node上。对于一…

人机环境系统中的“人”、“机”、“环境”

人机环境系统中的“人”、“机”、“环境”是指在一个系统中&#xff0c;人、机和环境三者的相互作用和影响&#xff0c;三者之间的相互作用和影响非常复杂&#xff0c;需要进行有效的协调和管理才能实现系统的高效运转或预期的目标。因此&#xff0c;人机环境系统的设计和优化…

vue elementui的select组件实现滑到底部分页请求后端接口

vue elementui的select组件实现滑到底部分页请求后端接口 1.实现效果2.实现原理 1.实现效果 老规矩&#xff0c;直接上最后的实现效果 2.实现原理 直接上代码 <el-form-item class"diagmosisItem" label"诊断" v-scroll"handleScroll">…

✔ ★【备战实习(面经+项目+算法)】 10.15学习时间表

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

【微信小程序开发】基础语法篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.视图层 1.数据绑定 wxml js 2 .列…

Python学习六

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

前端工程化知识系列(4)

目录 31. 你是否了解前端性能优化的指标&#xff0c;例如首次内容绘制&#xff08;FCP&#xff09;、最大内容绘制&#xff08;LCP&#xff09;和累计布局位移&#xff08;CLS&#xff09;&#xff1f;如何针对这些指标进行优化&#xff1f;32. 你有没有经验使用服务端渲染&…

Yum安装JDK11

一、安装命令 &#xff1a; yum install java-11-openjdk二、执行以下命令来查看 JDK 11 的安装信息&#xff1a; yum list installed | grep java-11-openjdk三、找到 JDK 11 的软件包名称&#xff08;使用以下命令来查询软件包的安装位置&#xff09;&#xff1a; rpm -ql…

AnolisOS升级SSH,不升级SSL

由于ssh有漏洞需要升级&#xff0c;但是为了最小化升级不影响ssl&#xff0c;因为ssl里面带了加密库&#xff0c;系统中很多核心服务的加密都是用ssl进行加密的&#xff08;像网络服务&#xff0c;系统用户登录等&#xff09;&#xff0c;如果ssl升级出现不兼容&#xff0c;就可…

Java实现B树

1.介绍 B树是一种自平衡的搜索树数据结构&#xff0c;常用于数据库和文件系统中的索引结构。它具有以下好处和功能&#xff1a; 高效的查找操作&#xff1a;B树的特点是每个节点可以存储多个关键字&#xff0c;并且保持有序。通过在节点上进行二分查找&#xff0c;可以快速定位…

260. 只出现一次的数字 III

给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1&#xff1a; 输入&…

计算机基础知识32

Socket抽象层(socket编程) # Socket是在应用层和传输层之间的一个抽象层&#xff0c;它把TCP/IP层复杂的操作抽象为几个简单 的接口供应用层调用已实现进程在网络中通信 socket () 对象 bind () 函数来绑定 listen () 监听&#xff0c;等别人电话 accept&#xff08;&#…

canal rocketmq

上篇文章canal 消费进度说到直接使用ClusterCanalConnector并发消费是有问题的&#xff0c;可以先用单点将canal事件发送到mq中&#xff0c;再由mq并发处理&#xff0c;另外mq还可以做到削峰的作用&#xff0c;让canal数据不至于阻塞。 使用队列&#xff0c;可以自己起一个单实…

AI电销机器人好不好用关键是什么?

影响AI电销机器人是否好用的两个因素分别是&#xff0c;识别系统以及线路。 有很多电销企业都想找一个好用的AI电销机器人&#xff0c;可是什么样的机器人才是好用的机器人呢?有哪些因素会影响AI电销机器人好不好用呢? 添加图片注释&#xff0c;不超过 140 字&#xff08;可选…

groupnorm_backward反向公式推导

前向 均值 μ n g ∑ i 1 M ( X i ) M (1) {\large \mathit{\color{Blue} \mu_{ng} \frac{\sum_{i1}^M(X^{i})}{M}} } \tag{1} μng​M∑i1M​(Xi)​(1) 方差 σ n g 2 ∑ i 1 M ( X i − μ n g ) M (2) {\large \mathit{\color{Blue} \sigma_{ng}^2 \frac{\sum_{i …

在 Linux 上保护 SSH 服务器连接的 8 种方法

SSH 是一种广泛使用的协议&#xff0c;用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是&#xff0c;不安全的默认配置也会带来各种安全风险。 具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其是如果使用的是公共 IP 地…

qt中json类

目录 QJsonValue QJsonObject QJsonArray QJsonDocument 案例&#xff1a; Qt 5.0开始提供了对Json的支持&#xff0c;我们可以直接使用Qt提供的Json类进行数据的组织和解析&#xff0c;下面介绍4个常用的类。 QJsonValue 该类封装了JSON支持的数据类型。 布尔类型&#xf…

【Power BI】Power BI 入门指南:版本、下载和报表创建的步骤

文章目录 一、前言二、了解 Power BI 版本三、下载 Power BI Desktop四、如何开始使用 Power BI Desktop五、在 Power BI Desktop 中创建报表六、文末总结 一、前言 Power BI 是微软于 2013 年推出的产品&#xff0c;为一款商业智能与数据可视化工具。它通过引人注目的视觉效果…

[Linux 基础] Linux编辑器Vim,你值得拥有

文章目录 1、Linux 软件包管理器 yum1.1 什么是软件包1.2 如何安装软件1.3 如何卸载软件 2、vim的使用2.1 vim的安装和配置2.2 vim的基本概念2.3 vim的基本操作 3、vim正常模式命令集4、vim注释与去注释5、Liunx编辑器-gcc/g使用5.1 如何使用gcc编译c程序5.2 gcc的翻译过程5.2.…

Python-pyecharts和pandas库

目录 pyecharts库 pandas库 示例1 示例2 pyecharts库 pyecharts是一个基于Python的交互式数据可视化库&#xff0c;旨在帮助用户轻松地创建各种类型的图表和可视化效果。该库是在Echarts开源项目的基础上开发的&#xff0c;Echarts是一款由百度开发的优秀的数据可视化工具。…