
算法概论
文章平均质量分 62
卫龙女孩
这个作者很懒,什么都没留下…
展开
-
c++实现简单计算器(+ - * /)
题目描述实验结果c++代码#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#include<...原创 2020-03-04 16:56:56 · 1203 阅读 · 0 评论 -
算法概论 project | Capacitated Facility Location Problem —— 贪心算法、模拟退火、禁忌搜索
题目描述Suppose there are n facilities and m customers. We wish to choose:which of the n facilities to openthe assignment of customers to facilitiesThe objective is to minimize the sum of the openin...原创 2018-12-22 01:22:09 · 649 阅读 · 1 评论 -
算法概论 project | python代码
# coding:utf-8from random import choiceimport numpy as npimport time# ---------------------------------------------------## globals ## ...原创 2018-12-22 01:14:55 · 182 阅读 · 0 评论 -
算法概论week 15 | leetcode 62. Unique Paths
题目描述解决方案这是一个基本的DP问题。由于机器人只能左右移动,当它到达一个点时,只有两种可能:它从上面到达这一点(向下移动到这一点);它从左到这一点(向右移动到这一点)。因此,我们得到以下状态方程:假设到达点(i, j)的路径数记为P[i][j],则P[i][j] = P[i - 1][j] + P[i][j - 1]上述方程的边界条件出现在最左边的列(P[i][j ...翻译 2018-12-10 15:45:09 · 138 阅读 · 0 评论 -
算法概论week14 | leetcode 413. Arithmetic Slices
题目描述分析这道题比较简单,不用动态规划也能在O(n)的复杂度下得出答案,我主要分析一下用动态规划怎么解决这道题。假设我们已经知道了以A[i]结尾的等差数列的个数(假设为n),那么以A[i + 1]结尾的等差数列的个数也能求出来,如果A[i + 1]与A[i]的差值等于A[i]与A[i - 1]的差值,以A[i + 1]结尾的等差数列的个数就为n + 1,否则为0,而数组 A 中所有为等...原创 2018-12-02 00:50:00 · 126 阅读 · 0 评论 -
算法概论week12 | leetcode.120 Triangle
问题描述分析三角形具有树形结构,这将使我们考虑遍历算法,如DFS。但是,如果仔细观察,我们会发现,相邻的节点总是共享一个“分支”。同时,假设x和y是k的“子节点”,如果已知分别从x和y到底部的最小路径,我们就可以在O(1)的时间复杂度内确定从k开始的最小路径。因此,就时间复杂度而言,动态规划是解决这个问题的最佳方案。“自底向上”的动态规划非常简单:我们从最下面一行的节点开始,这些节点的最...原创 2018-12-01 21:55:17 · 163 阅读 · 0 评论 -
算法概论week11 | leetcode 96. Unique Binary Search Trees
题目描述分析找出有n个节点的,结构不同的二叉树的个数。刚开始我在想动态规划的子问题是什么,0个节点的树有0种,1个节点的树有1种,2个节点的有2种,3个节点的。。。嗯?好像不太好算?其实,3个节点的树可以想象成是一个顶点,加上左子树和右子树,左子树和右子树的节点树一定比3小,这表示它们的个数是已知的,将它们的个数相乘,就是3个节点的二叉搜索树的个数。以此类推,可以求出n个节点的树的个数。...原创 2018-11-18 22:14:30 · 141 阅读 · 0 评论 -
算法概论week9 | leetcode 241.Different Ways to Add Parentheses
题目描述Given a string of numbers and operators, return all possible resultsfrom computing all the different possible ways to group numbers andoperators. The valid operators are +, - and *.Example ...原创 2018-11-05 22:24:22 · 122 阅读 · 0 评论 -
算法概论week10 | leetcode 877. Stone Game
题目描述分析这道题是比较有技巧性的。由于题目规定石子堆数为偶数,那么可以把石子堆分成两种堆——奇数堆和偶数堆,先开始的人可以分别计算这两种堆的总和,如果奇数堆的和大,那么就可以一直选择奇数堆的石子堆(为什么可以一直选择奇数堆的石子呢?因为堆数为偶数,两端的堆就分别属于奇数堆和偶数堆,先开始的人拿走一堆后,两端的堆就只属于奇数堆或只属于偶数堆了,后开始的人拿走一堆后,先开始的人又可以选择...原创 2018-11-09 21:35:58 · 311 阅读 · 0 评论 -
算法概论week8 | Leetcode 123. Best Time to Buy and Sell Stock III
题目描述分析题目要求只能进行两次交易,且在购买股票之前,要先把已经购买了的股票卖出。第一次交易时,我们可以用一个变量buy1记录前n天的最小股票价格,用sell1记录前n天能获得的最大利润,这样,在第n天,我们可以知道之前几天哪天的股票最优惠,并在那天买入股票,如果在今天卖出,能获得最大利润,那么就把股票卖出。第二次交易时(实际上紧跟着第一次交易,在同一天进行),我们用一个变量buy...原创 2018-10-28 10:48:09 · 163 阅读 · 0 评论 -
算法概论week7 | leetcode 310. Minimum Height Trees
目录题目描述分析代码题目描述分析这道题很容易想到用dfs分别求出每棵树的高度,再取最小值,但是这样复杂度太高了,最后一个样例怎么都不能通过,于是只好另辟蹊径,参考了别人的博客,学到了一种新的算法,就是逐步删除叶子节点,直到没有可删除的节点,剩下的这个/些节点就是答案。首先用map把图表示成有向图: map&amp;lt;int, set&amp;lt;int&amp;gt;&am原创 2018-10-19 00:20:50 · 113 阅读 · 0 评论 -
算法概论week5 | 743. Network Delay Time
目录题目描述解题思路完整代码题目描述解题思路这题可以通过Dijkstra算法求解。由于要求所有节点都收到信号所需的时间,可以用vector存储每个节点收到信号的时间,最后排序,如果有节点没有被更新(仍是初始的很大的值),则表示有节点没有收到信号,返回-1,否则返回时间的最大值。首先,为了避免重复访问,用edges记录每条边,time记录每条边的值:vector&lt;vec...原创 2018-10-07 19:09:37 · 209 阅读 · 0 评论 -
算法概论week6 | 684. Redundant Connection && 685. Redundant Connection II
684跟685题题型类似,区别就是,684是无向图,685是有向图。目录6841.1 题目描述1.2 解法一1.3 解法一代码1.4 解法二1.5 解法二代码6851.1 题目描述1.2 解法1.3 代码6841.1 题目描述1.2 解法一第一种解法是比较传统的做法,从数组的尾端开始删除一条边,看是否能通过一次dfs访问所有的节点,如果能,则这条边就...原创 2018-10-12 23:24:18 · 140 阅读 · 0 评论 -
算法概论week4 | 210. Course Schedule II
目录题目描述主要思路解题过程完整代码题目描述这个问题相当于判断有向图中是否存在循环。如果存在循环,则不存在拓扑排序,因此不可能选取所有课程进行学习。如果没有循环,则可以进行拓扑排序。主要思路我们可以通过DFS进行拓扑排序。回忆一下DFS的主要过程:procedure dfs(G) for all v ∈ V: visited(v) = false for all...原创 2018-10-02 15:10:05 · 159 阅读 · 0 评论 -
算法分析week3 | 785. Is Graph Bipartite?
目录题目描述解题过程完整代码题目描述解题过程这道题与书上习题3.7类似。二部图是这样的图G=(V,E),其顶点集合可以被划分为两个子集(V = V1 ∪ V2 且 V1 ∩ V2 = Ф),并且子集内部的顶点之间没有边相连。要判断一个无向图是否是二部图,我们可以考虑这个图是否可以用两种颜色为它着色,有边相连的两个顶点需要着不同颜色。首先,用一个数组subsets来记录每个...原创 2018-09-23 21:24:31 · 209 阅读 · 0 评论 -
算法概论week2 | Leetcode 215. Kth Largest Element in an Array
这周讲到分治算法,因此我想用随机分治算法解决这道选择问题。目录:问题描述解题步骤代码问题描述输入: 一列数的集合nums;一个整数k 输出: 集合S中第k大的元素解题步骤这道题与书上2.4节的问题如出一辙,因此,我们可以首先随机选择一个数v,然后把集合nums中的数分为三组:比v小的数,与v相等的数以及比v大的数,并分别记这三组数为left,m...原创 2018-09-15 23:15:12 · 160 阅读 · 0 评论 -
算法概论week1 | LeetCode 78. Subsets
LeetCode 78. Subsets暑假我在leetcode上已经做了200多道题,虽然其中大部分是简单题,但是还是有一些题目令我做到脱发,因此,我想挑几道我暑期收藏的题目,记录下解题过程。目录:问题描述解法一解法二问题描述解法一这道题我们并不陌生,就是求一个给定集合的子集。通常,我们是根据元素个数来求子集的,即首先找出元素个数为0的子集...原创 2018-09-09 16:58:14 · 198 阅读 · 0 评论