LeetCode
Leetcode刷题总结
菠萝开方
这个作者很懒,什么都没留下…
展开
-
743. 网络延迟时间
原题:743. 网络延迟时间这一题可以使用 dijkstra 算法求最短时间,与标准的 dijkstra 算法求最短路径存在区别的地方在于没有指定 dst 节点,题目询问是否可以从 src 出发走完所有的节点,如果可以输出走完所有节点所需的最短时间,不能则输出 -1 。解决方法:可以将 distance 数组整个返回,如果其中有数值为 -1 (代码提前预处理过)的节点则表示从 src 无法到达此节点。没有的话就取 distance 数组中的最大值即为走完所有节点所需最短时间。struct cmp{原创 2021-08-20 16:31:07 · 199 阅读 · 0 评论 -
拓扑排序:编译依赖问题
一个完整的软件项目往往会包含很多由代码和文档组成的源文件。编译器在编译整个项目的时候,可能需要按照依赖关系来依次编译每个源文件。比如,A.cpp 依赖 B.cpp,那么在编译的时候,编译器需要先编译 B.cpp,才能再编译 A.cpp。 假设现有 0,1,2,3 四个文件,0号文件依赖1号文件,1号文件依赖2号文件,3号文件依赖1号文件,则源文件的编译顺序为 2,1,0,3 或 2,1,3,0。现给出文件依赖关系,如 1,2,-1,1,表示0号文件依赖1号文件,1号文件依赖2号文件,2号文件没有依赖,3号文原创 2021-07-06 19:56:55 · 1117 阅读 · 0 评论 -
拓扑排序:LC 207. 课程表 & 210. 课程表 II
207. 课程表原创 2021-07-06 16:09:20 · 319 阅读 · 0 评论 -
牛客网 ACM模式单行输入输出规范
题目描述:求a+b的和。输入的数据有多组,每一行有两个数a和b:0< a,b <100000.要求每行输出一个结果。编译器信息:版本:clang++3.9,采用c++11标准,编译的时候采用-O2级优化,支持万能头文件 <bits/stdc++.h>。输入输出处理:核心代码模式处理不需要处理任何输入输出,直接返回值即可。ACM 模式你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出:#include <iostream>using na转载 2021-07-05 21:09:10 · 5767 阅读 · 0 评论 -
C++:DFS求最优路径
vivo游戏中心的运营小伙伴最近接到一款新游戏的上架申请,为了保障用户体验,运营同学将按运营流程和规范对其做出分析评估。经过初步了解后分析得知,该游戏的地图可以用一个大小为 n*n 的矩阵表示,每个元素可以视为一个格子,根据游戏剧情设定其中某些格子是不可达的(比如建筑、高山、河流或者其它障碍物等),现在请你设计一种算法寻找从起点出发到达终点的最优抵达路径,以协助运营小伙伴评估该游戏的可玩性和上手难度。输入描述:第一行表示矩阵大小 n,5 <n < 10000第二行表示起点和终点的坐标第原创 2021-07-05 20:35:09 · 606 阅读 · 0 评论 -
HJ77 火车进站
描述给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。要求输出所有火车出站的方案,以字典序排序输出。输入描述:有多组测试用例,每一组第一行输入一个正整数N(0输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。示例1:输入:31 2 3输出:1 2 31 3 22原创 2021-06-29 09:54:38 · 742 阅读 · 0 评论 -
C++:表达式求值(四则运算)实现
请写一个整数计算器,支持加减乘三种运算和括号。示例1输入:“1+2”返回值:3示例2输入:“(2*(3-4))*5”返回值:-10示例3输入:“3+2* 3* 4-1”返回值:26#include<string>#include<stack>#include<iostream>using namespace std;#define N_OPTR 6typedef enum { ADD, SUB, MUL, L_P,原创 2021-06-25 17:23:21 · 2533 阅读 · 0 评论 -
C++:数组的输入、排序与去重操作
知识点:数组描述:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。原创 2021-06-23 17:53:50 · 1540 阅读 · 0 评论 -
C++:以空格分隔的字符串的输入输出
vivo2022届提前批校招笔试题幸运员工题目描述:选出工号中含有数字7或是7的倍数的幸运员工。输入描述:原创 2021-06-19 10:58:32 · 3026 阅读 · 0 评论 -
回文字符串
回文字符串就是正读和反读都一样的字符串,如“viv”、“nexen”、“12321”、“qqq”、“翻身把身翻” 等。给定一个非空字符串 str,在最多可以删除一个字符的情况下请编程判定其能否成为回文字符串;如果可以则输出首次删除一个字符所能得到的回文字符串,如果不行则输出字符串 “false” 。和LeetCode这一题相似:680. 验证回文字符串 Ⅱ...原创 2021-06-17 16:33:27 · 6847 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
原题:剑指 Offer 29. 顺时针打印矩阵与主站 54 题相同:54. 螺旋矩阵方法:边界约束自写报错原因分析class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int row=matrix.size(),col=matrix[0].size(); if(!row) return result;原创 2021-06-04 19:18:14 · 55 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
原题:剑指 Offer 26. 树的子结构在实现当中主要分为两个函数:isSubStructure:的主要作用是从当前两个根结点开始判断Tree2是否是Tree1的子结构,传入参数为Tree1中的任意一个非空结点和Tree2的根结点。作用就是将Tree1拆分成若干个子树与Tree2进行逐个对比。DoesTree1HaveTree2:一旦找到两个相同值的结点,就可以接着往下进行对比了。这里就要调用DoesTree1HaveTree2,它的作用就是帮助判断值相同的根结点所形成的两个子树是否具有相同结构。原创 2021-06-03 19:51:57 · 122 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
原题:剑指 Offer 07. 重建二叉树原创 2021-06-02 19:59:20 · 87 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
原题:剑指 Offer 16. 数值的整数次方浮点数误差问题我们在判断底数x(double类型)是否等于0的时候,不能直接写x==0,这是因为计算机在表示浮点数的时候存在误差。我们不能用等号判断两个小数是否相等。如果两个小数的差的绝对值很小,就可以认为他们相等。计算机只能处理0、1代码,浮点数在计算机中存储的时候也采用的是二进制。将十进制小数转换成二进制小数的方法为基数乘法 :如果某个十进制小数乘2操作的最终结果始终无法得到1.0,表示它的二进制小数就是一个无限小数。由于double类型和flo原创 2021-05-29 18:06:16 · 65 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
前情提要:在网络编程中,如果URL参数中含有特殊字符,如空格、’#‘等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%‘后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如’#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。方法一:在原字符串上做替换由原来的一个空格,替换后变成'%'、'2'和'0'三个字符,字符串会因此变长,那么就需要.原创 2021-05-23 20:18:47 · 63 阅读 · 0 评论 -
26. 删除有序数组中的重复项
思路使用双指针遍历一次数组。左右指针的初始位置为0,左指针用来定位,右指针用来找元素。左指针与右指针的元素不相同的时候,左指针先自加一次,然后将右指针所指元素放在左指针指向的位置。左右指针元素相同或者不相同,右指针都需要向后移动一位。实现自写class Solution {public: int removeDuplicates(vector<int>& nums) { int left=0,right=0,n=nums.size();原创 2021-05-19 19:46:11 · 52 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
实现class Solution {public: bool compareXY(int x,int y){ string xy,yx; string xs=to_string(x); string ys=to_string(y); xy.append(xs); xy.append(ys); yx.append(ys); yx.append(xs);原创 2021-04-20 16:25:36 · 69 阅读 · 0 评论 -
剑指 Offer 50. 第一个只出现一次的字符
思路字符串s只包含小写字母,因此可以用数组模拟一个哈希表。因为可能出现的字符只有26个,因此数组大小设置为26。用cr[a]记录字符a出现的次数,遍历一次字符串s,统计完成cr[26]数组。第二次遍历字符串s,直接判断当前字符出现次数是否为1,第一次出现的字符直接使用return语句返回。关键词:数组细节初始化数组直接使用 int cr[26]={ };,初始化数组元素为0.如果不初始化数组,就会被随机赋值,程序结果会出错。没有字符字符串s为空串的时候,直接返回单空格。调用s.lengt原创 2021-05-18 19:25:50 · 63 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:我在分析这个问题的时候,第一步首先想到的是,在纸上把代表二维数组的矩形画出来,然后分别查找第一行和第一列最先大于target值的行列坐标,这样可以把搜索范围确定在矩形的左上角。当然由于...原创 2019-11-19 15:23:30 · 97 阅读 · 0 评论