算法
文章平均质量分 63
TeeEye
自律即自由
展开
-
计蒜客 光合作用 (折半查找 / 双指针扫描)
题目链接https://nanti.jisuanke.com/t/38解题思路该题AC有两种思路二分查找将光源的横坐标排序对于每个种子(横坐标 x ), 找到距离他最近的大于等于其坐标光源 light_right找到距离他最近的小于其坐标的光源 light_left比较得到最短光源距离,从而得到每个种子的高度代码 ( C )#include <stdio.h>...原创 2018-11-20 19:43:08 · 251 阅读 · 0 评论 -
DP (一): 最长括号子串
最长括号子串前言思路代码 (C语言)前言这个系列用来学动态规划.题目链接在此题目要求就是给你一个只有小括号的字符串, 让你算一下最长的合法子串长度.不过这题和最长回文子串还是有些区别, 我一开始用的回文子串的思路来写DP发现非常麻烦还没写对, 最后改用的栈, 发现我的方法比100%的其他使用者都快而且使用内存都小.思路维护两个数据结构: 栈 (stack) 和容器 (count)栈...原创 2019-04-21 22:14:09 · 932 阅读 · 1 评论 -
字节跳动19春招研发笔试 旅行商(TSP)问题 (记忆化搜索)
前言不会做, 只会DFS (贪婪 + 分支界限都试了, 然而只过了 50%的测试用例, 其他的超时), 学!!思路贪婪 (先搜索最近的) 和分支界限都只能提高最优情况的性能, 在最坏情况下仍然没有帮助. 所以 DFS 最坏情况下的复杂度是 (n−1)!(n -1)!(n−1)! (阶乘就是爆炸)仔细观察会发现, 假如一共有6个城市, 那么1- perm{2, 3, 4} - 5 - 6 ...原创 2019-04-15 10:25:54 · 472 阅读 · 0 评论 -
DP (二): LeetCode123. Best Time to Buy and Sell Stock III
LeetCode123. Best Time to Buy and Sell Stock III题目思路代码 ( C语言, 复杂度 O(n) )题目Say you have an array for which the iiith element is the price of a given stock on day iii.Design an algorithm to find the ...原创 2019-04-27 22:01:10 · 206 阅读 · 0 评论 -
概率计算 (习题): 蒜头君王国
蒜头君王国题目基础知识思路代码C语言Python总结题目给你 N 个节点, 任意一对节点之间相连的概率为 p, 求整个图是连通图的概率.题目链接基础知识假设有两个事件,事件 XXX 可能的取值是 {1,0}\{1, 0\}{1,0}事件 YYY 可能的取值是 {y1,y2,...,yn}\{y_1, y_2, ... , y_n\}{y1,y2,...,yn}那么概率P(X...原创 2019-04-23 20:29:12 · 719 阅读 · 0 评论 -
贪心 (一): HDU 6180
HDU 6180题目思路代码 ( C语言 )题目给你 nnn 个任务, 每个任务都有一个开始结束时间, 你有很多机器, 每个机器同一时刻只能执行一个任务, 问你最少需要几台机器才能完成所有任务, 并且这些机器总共的运行时间总和的最小值是多少. (机器一旦开始使用, 知道最后完成所有任务, 中途不能关机)思路二分会 TLE.将每个任务拆成两个数据: 开始时间和结束时间, 因此一共有 2n2...原创 2019-04-28 18:20:24 · 229 阅读 · 0 评论 -
(模板) Dinic 最大流
代码/* * DINIC 模板 * * BEGIN *//* 需要的头文件#include <string.h>#include <queue>#include <vector>using namespace std;*/#define MAXN 10000 // 结点最大数量#define INF 0x7fffffffty...原创 2019-04-30 16:16:06 · 129 阅读 · 0 评论 -
组合数学 (习题): HDU 2152
HDU 2152题目输入输出输入输出思路代码 (C 语言)总结题目转眼到了收获的季节,由于有TT的专业指导,Lele获得了大丰收。特别是水果,Lele一共种了N种水果,有苹果,梨子,香蕉,西瓜……不但味道好吃,样子更是好看。于是,很多人们慕名而来,找Lele买水果。甚至连大名鼎鼎的HDU ACM总教头 lcy 也来了。lcy抛出一打百元大钞,“我要买由M个水果组成的水果拼盘,不过我有个小小...原创 2019-05-06 13:56:07 · 488 阅读 · 0 评论 -
数据结构 (一): 树状数组 / 二叉索引树 / BIT
树状数组简介lowbitBIT 的组织方式代码 ( C 语言 )注意事项总结简介树状数组的学名是二叉索引树, Binary Indexed Tree, BIT, 下文以 BIT 简称.BIT 是一种特殊组织过的数组, 它和普通数组的唯一区别是:BIT 的核心任务是快速求区间和, 而数组的核心任务是随机存取, 因此, 二者在只是时间复杂度上有所不同:数据结构单点修改单点访问区...原创 2019-05-06 23:01:08 · 347 阅读 · 0 评论 -
数据结构 (习题): 树状数组相关
树状数组习题PKU 2352思路代码PKU 2481代码POJ 3067思路代码PKU 2352链接在这里.题目大意: 一个点的 order 是不包括它在内的所有在它左下方的点的总数, 问你点集中每个 order 的点的数量.思路树状数组的牛逼之处在于, 它可以动态地查询比当前值小的元素个数 (要求取值范围不要太大). 在这题当中, 因为有两个维度, 所以我们可以先通过排序 (题目已经提...原创 2019-05-07 10:31:29 · 145 阅读 · 0 评论 -
数组分段使得每个段的元素之和最大的最小
题目描述给 n 个正整数 a_1 … a_n, 将 n 个数排成一列后分割成 m 段, 每一段的分数为这段内所有数的和, 该次分割的分数被记为 m 段分数的最大值.问所有分割方案中分割分数的最小值是多少?思路二分搜索.首先定义一个函数 check, 返回布尔型, 用来检查能不能用一个数 x 来将数组分割成 m 份, 使得每份的和不大于 x.显然如果 x 足够大, 是可以的, 而 x 如...原创 2019-04-13 17:05:51 · 2219 阅读 · 0 评论 -
字节跳动2019第一次笔试题第四题
前言我看了好多博客的解法都是 O(n2)O(n^2)O(n2) 复杂度的, 显然不对啊老哥们…题目描述两个长度为n的序列a,b。问有多少个区间[l,r]满足max(a[l,r])<min(b[l,r])即a区间的最大值小于b区间的最小值数据范围:n<1e5,a(i),b(i)<1e9输入描述:第一行一个整数n第二行n个数,第i个为a(i)第三行n个数,第i个为b(i...原创 2019-04-13 15:05:06 · 483 阅读 · 1 评论 -
判断单向链表是否有环
判断单链表是否有环问题汇总判断是否有环思路代码找出环的入口点思路代码求环的长度思路代码求环上距离任意一点最远的点判断两个无环链表是否相交判断相交的位置问题汇总给一个单链表,判断其中是否有环的存在;如果存在环,找出环的入口点;如果存在环,求出环上节点的个数;如果存在环,求出链表的长度;如果存在环,求出环上距离任意一个节点最远的点(对面节点);如何判断两个无环链表...原创 2019-04-12 23:29:06 · 246 阅读 · 0 评论 -
温习Algs4 (一):背包, 栈, 队列和线性表
背包背包是最简单的数据结构, 只有添加数据和遍历元素两个功能, 内部实现是链表.Bag.java/****************************************************************************** * Compilation: javac Bag.java * Execution: java Bag * Autho...原创 2018-11-29 10:56:16 · 458 阅读 · 0 评论 -
温习Algs4 (二):优先级队列(堆)
优先级队列优先级队列 (Priority Queue) 实质上是一个堆, 支持的操作是push和pop, pop时总是返回当前队列中的最小(大)值.PQ.java/****************************************************************************** * Compilation: javac PQ.java * ...原创 2018-11-30 09:13:01 · 186 阅读 · 1 评论 -
温习Algs4 (三):无向图, 搜索和连通分量
无向图对于一般算法题来说图的实现方式是邻接矩阵, 但是对于稀疏图来说用邻接表来实现比较实惠一点.图的API多种多样, 我这里实现的API有:添加边获得该图的顶点数和边数遍历一个点的所有邻接点获得一个点的degreeGraph.java/************************************************************************...原创 2018-11-30 20:45:24 · 167 阅读 · 0 评论 -
温习Algs4 (四):有向图, 拓扑排序和强连通分量
有向图有向图的实现和无向图除了 addEdge() 以外一模一样, 不过有向图多了一个方法 reverse() , 该方法返回这个有向图的逆图 (即将原图的所有边翻转方向), 在下文的强连通分量中会用到.Digraph.java/****************************************************************************** * ...原创 2018-12-02 00:42:44 · 246 阅读 · 0 评论 -
温习Algs4 (五):并查集, 最小生成树
并查集, 带权图和最小生成树并查集UnionFind.java带权边和带权图WeightedEdge.javaEdgeWeightedGraph.java最小生成树APIMST.javaPrim算法Prim.javaKruskal 算法Kruskal.java复杂度分析并查集英文名 Union Find, (UF). 是一个基于森林的数据结构, 支持的操作是连接两个节点判断两个节点是否相...原创 2018-12-05 21:18:10 · 166 阅读 · 0 评论 -
温习Algs4 (六):网络流
网络流数据模型FlowEdge.javaFlowGraph.javaMax Flow APIMaxFlow.java最大流 Ford-Fulkerson算法FordFulkerson.java数据模型网络流图是在有向图的基础上, 每条边多了两个属性: 流量和最大容量, 因此先定义网络流的边类 FlowEdge:FlowEdge.java/**************************...原创 2018-12-15 12:01:17 · 188 阅读 · 0 评论 -
温习Algs4 (六):有向带权图,最短路径
有向带权图, 最短路径有向带权图WeightedDirectedEdge.javaEdgeWeightedDigraph.java最短路径SP.javaDijstra算法Dijstra.javaBellman-Ford最短路径算法BellmanFord.java算法比较有向带权图有向带权图的API和有向图的几乎一样, 不再赘述WeightedDirectedEdge.java/******...原创 2018-12-10 11:36:13 · 1074 阅读 · 0 评论 -
字节跳动19春招研发笔试 过河问题 (智力题)
前言这道题否定了我的智力.题意n 个人 a1,a2...ana_1, a_2 ... a_na1,a2...an 过河, 每个人 aia_iai 都有一个 wiw_iwi只有一艘船每次过河船上最多装3人, 最少装2人每次过河的时间是船上 wiw_iwi 的最大值求最短过河时间.我的思路 (错误思路)因为每次送完3个人到对岸之后, 要回来两个人摆渡, 那么我就选择 wi...原创 2019-04-15 19:40:38 · 1931 阅读 · 0 评论 -
字节跳动2018年校招笔试题
1思路DFS 找出最大连通分量代码mat = []mark = []mn = input().split(',')m = int(mn[0])n = int(mn[1])direction = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]def valid_pos(row, ...原创 2019-04-12 21:35:39 · 701 阅读 · 0 评论 -
数据结构 (二): RMQ / 区间最值查询
RMQ简介RMQ 的组织方式代码 ( C语言 )总结简介在上一篇博客中介绍的 BIT 数据结构用来进行单点修改和查询区间和, 而本篇的数据结构 RMQ (Range Minimum Query) 则用来进行区间最值查询.RMQ 的组织方式RMQ 和普通数组的区别是: RMQ 是二维数组, 维度为 {N,logN}\{N, logN\}{N,logN}, 其中 rmq[i][j]rmq[i]...原创 2019-05-07 16:46:57 · 369 阅读 · 0 评论