算法设计与分析
WSQPoison
这个作者很懒,什么都没留下…
展开
-
LeetCode算法问题4 —— Longest Palindromic Substring
问题描述问题要求我们找到一个字符串s中最长的回文子串首先我们看看什么叫做回文,我认为,就是对称,也可以这样理解,将回文字符串从中间折叠,能够刚好吻合。那么该如何判断回文?有一个方法是递归,一个回文字符串去掉一头一尾,依旧是回文字符串。根据这个原理我们可以把要判断的字符串减去头尾继续递归。这个用编程语言很好写,就是算法复杂度可能会高一点。不过这次我用的是另外一种方法:找到一个中心点,然后以此为圆心向两原创 2017-09-09 16:03:31 · 418 阅读 · 0 评论 -
LeetCode算法问题16 —— Climbing Stairs
首先看下问题描述 给一个n表示n级台阶,而我们上台阶的方式有一次上1个台阶和一次上2个台阶,需要我们求出到n级台阶一共有多少种方法。这题自然可以采用递归的方式,对于所到达的每级台阶,再次求其到第n级台阶的方法,具体实现类似如下伪代码:GetWay(current_step, aim_step) { int ways = 0; if (current_step <= aim_step原创 2018-01-16 12:05:39 · 391 阅读 · 0 评论 -
LeetCode算法问题14 —— Kth Largest Element in an Array
首先看下问题描述题目要求给一个无序数组,要求找到第k大的数。最先想到的办法自然是通过排序先获得一个有序数组,再通过提取对应位置获得结果,例如,可通过库函数sort来解答问题: int findKthLargest(vectorint>& nums, int k) { sort(nums.begin(), nums.end()); retur原创 2018-01-13 16:12:30 · 234 阅读 · 0 评论 -
NP-Complete Problem
如题一:Prove that the following problem is NP-complete: given an undirected graph G=(V, E) and an integer k, return a clique of size k as well as an independent set of size k, provided both exist.给了一个无向图G原创 2018-01-01 16:42:03 · 692 阅读 · 0 评论 -
LeetCode算法问题12 —— Partition to K Equal Sum Subsets
看一下问题描述 问题要求判断一个给定的数组能否划分为k个代数和相同的子数组。首先必须获取给定数组的和 int sum = 0; for(int num:nums) sum += num;问题就变成了将每个元素划分到哪个子数组的问题了,我的想法是先让第一个子数组从起始位置开始挑选数字看能否组成一个和为sum/k的子数组。 那么这样子就要创建k个子数组了吗?答案是否定的,我创建了一个数组原创 2017-12-03 20:48:44 · 347 阅读 · 0 评论 -
LeetCode算法问题13 —— Search Insert Position
问题描述: 要求给定一个已排序数组,以及一个目标值,如果数组中存在目标值,则返回第一次出现目标值的位置,否则返回应当插入数组中的哪个位置。 题目指示不会出现重复数在数组中,因此使用了二分查找法int searchInsert(vector<int>& nums, int target) { int low = 0, high = nums.size()-1; //原创 2017-12-10 16:02:54 · 299 阅读 · 0 评论 -
LeetCode算法问题11 —— Maximum Length of Repeated Subarray
先看问题描述 给定两个整数型数组,要求找出相等的最长子串的长度。特别的,将数组长度限制在了1-1000,且数组元素限制在了0-100本体采用了动态规划的算法,从最短相同子串慢慢累积到最长相同子串,每一个更长子串都是基于上一次较短子串获得的。这里定义一个数组C[i][j]记录以给定数组A[i]和B[j]结尾的相同子串长度,也就是说,如果A[i] 和B[j]不相同,则相同子串在此处已经完结,如果相同,原创 2017-11-05 16:51:11 · 327 阅读 · 0 评论 -
LeetCode算法问题9 —— Two Sum
先看问题描述 题目给定一个整数型数组以及一个目标和,要求找出数组中和为目标和的整数对(两个整数相互独立)。特别的,题目假定输入限制了数组中有切仅有一对整数答案。首先想到的办法肯定是对于数组进行遍历,在这一层遍历的基础上再建立一个向后的遍历以查找答案,它的基本思想是这样的:in array a1, a2, ..., anfor i from 1 to n-1 for j from i+原创 2017-10-23 20:40:30 · 300 阅读 · 0 评论 -
LeetCode算法问题10 —— Best Time to Buy and Sell Stock with Transaction Fee
问题描述 prices是这个股票每天价钱的数组,而fee,我把它理解为手续费,即一组买入卖出后要交的费用。 题目要求我们手上只能有1份股权,也就是说如果我们还想买进股票,必须先把原先自己拥有的股票抛售才行。 整个问题的描述就是这样,要求也很简洁,求出我们能获得的最大利润。可以很简单的确认一次交易的利润,假定我们在第i天买入,第j天抛售(以0为起始天),则 profit=prices[j]−p原创 2017-10-29 16:55:34 · 348 阅读 · 0 评论 -
LeetCode算法问题6 —— Container With Most Water
先看一下题目题目说的是给定一个数组,将数组中的每个数作为一个Y值,其对应下标号(从1开始)作为X值,从该点下拉一条竖线到X轴,将这条竖线作为一个木板,求出由两条竖线和它们之间的X轴做成的水桶的最大容积。这个问题牵扯到短板问题,即,一个木桶的最大容积是由围成它的最短的木板所决定的。因此对于本题来说,容积公式应该为:V = the lowest height * x解决这个问题首先想到的自然是暴力算法,原创 2017-10-01 22:51:54 · 439 阅读 · 0 评论 -
LeetCode算法问题7 —— Longest Substring Without Repeating Characters
问题描述 简单来说,就是找一个字符串中最长的不存在重复字母的子串长度自然遍历字符串一遍是不可避免的,自然,我的想法就是建立一个临时字符串变量temp存储当前遍历到的无重复字母的字符串,在对给定字符串进行遍历的时候,可能会出现几种情况:不是重复字母,则temp将其加上是重复字母,则: a. 首先比较当前temp长度和目前所遇到的最长长度哪个大,若是temp较长则替换 b原创 2017-10-08 14:29:31 · 331 阅读 · 0 评论 -
LeetCode算法问题3 —— Median of Two Sorted Arrays
问题描述问题要求我们找到给定的两个已排序的数组组合在一起的中位数(median)。关于时间复杂度为O(log(m+n))的要求,我还没达到,但是想到了一个不错的方法,先记录下来。说到中位数的计算,牵扯到这个数列的长度:为奇数:就取中间的数为偶数:取中间两位数的平均值那么如何找到中位数呢?笨办法当然是乖乖地把两个数组的数都取出来然后排序,最后再取中位数。但是我突然注意到了sorted,那么完全就原创 2017-09-09 20:07:06 · 307 阅读 · 0 评论 -
LeetCode算法问题1 —— Add Two Numbers
最近在学校提供网站LeetCode上刷算法题,近段时间会将一些自己觉得有意义,值得效仿的点写下来,为自己以后的工作和学习所用。今天讲的是Add Two Numbers首先看一下问题描述 问题大概意思是这样的:分别将两个非负整数的各个数位用链表连接起来,且数字的存储方向是反向的,即,2->4->3其实是342。要求我们计算出两个整数的和并以相同方式返回。同时,题目提供了这种链式的数据结构stru原创 2017-09-07 19:15:51 · 374 阅读 · 0 评论 -
LeetCode算法问题18 —— Ones and Zeroes
看一下问题描述题目给定一个字符串数组,求出由m个0和n个1能够构成字符串数组中字符串的最大数量我采用了一种动态规划的方法解决本题,对于函数 int findMaxForm(vector& strs, int m, int n)首先创建了一个三维数组对于数组元素dp[k][m0][n0]表示:还有m0个0和n0个1可用时,对于前k个字符串集合所可以组成的最大字符串个数,这样我们就可以首先确定我们返回原创 2018-01-17 18:07:13 · 344 阅读 · 0 评论