LeetCode OJ
打工人小飞
公众号:机器修行
展开
-
BFS 解决 Word Ladder 问题
资源来源于 LeetCode127——Word Ladder。题目描述如下: 以题目给出的例子为例,其实就是在所有路径的权重都为1的情况下求出下列无向图中从节点 hit 到节点 cog 的最短路径: Postscript:图中相互之间只相差一个字母的单词都是相邻节点。这个就是图论算法中的单源最短路,求单源最短路比较通用的算法是 BFS 和 Dijkstra 算法,其区别是 BFS 不能用于带原创 2018-04-27 12:20:18 · 887 阅读 · 0 评论 -
牛顿迭代法求解开方问题
五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论。没有根式解不意味着方程解不出来,数学家也提供了很多方法,牛顿迭代法就是其中一种。资源来源于 LeetCode69——Sqrt(x)。题目描述如下所示: 题目要求实现库函数 sqrt(),并返回整数,实际上是降低了迭代次数,减少了计算量。解决该问题的一个较优也是很经典的方法就是牛顿迭代法。牛顿原创 2018-03-23 10:43:25 · 2629 阅读 · 0 评论 -
整数除法的原理
资源来源于 LeetCode29 —— Divide Two Integers. 题目描述如下所示: 这道题让我们求两数相除,而且规定我们不能用乘法,除法和取余操作,比较直接的方法是用被除数一直减去除数,直到为0。这种方法有极端情况,比如除数为1,被除数接近 INT_MAX,则此时复杂度为 O(n)O(n). 除此之外,我们还可以用另一神器位操作 Bit Operation,思路是,如果被除数大于原创 2018-02-25 17:18:57 · 5585 阅读 · 0 评论 -
深度优先搜索(DFS)解决括号排列问题
资源来源于 LeetCode22 —— Generate Parentheses。题目描述如下所示: 该问题是要将所有合法的括号排列打印出来。针对一个长度为 2n 的合法排列(n为左括号或者右括号的个数),第 1 到 2n 个位置都满足如下规则:左括号的个数大于等于右括号的个数。所以,我们就可以按照这个规则去打印括号:假设在位置 k 我们还剩余 leftNum 个左括号和 rightNum 个右原创 2018-02-08 17:14:23 · 894 阅读 · 0 评论 -
栈操作解决括号匹配问题
资源来源于 LeetCode 20 —— Valid Parentheses。题目描述如下所示: 题目意思简单明确,即判断所给的括号字符串是否合法。此题用栈的思想去解决再好不过了,首先将所有括号成对存储在 map 中,遍历字符串,只要栈不为空或者栈顶元素与指定字符不成对匹配,就将指定元素压栈,否则将栈顶元素出栈。一次遍历结束后,如果栈为空,则表示所给括号字符串已经全部匹配成功,即为合法字符串,否则原创 2018-02-05 20:22:00 · 533 阅读 · 0 评论 -
删除链表中倒数第n个节点(时间复杂度为O(n))
资源来源于 LeetCode 19 —— Remove Nth Node From End of List。题目描述如下所示: 题目意思很简单,简而言之就是删除链表中倒数第n个节点,需要注意的是(图中红框标出),只能遍历一次链表。还有一点,n一定是有效的,即n不会大于链表中的元素总数。我们首先要考虑的时,如何找到倒数第n个节点,由于只允许一次遍历,所以我们不能用一次完整的遍历来统计链表中元素的个数原创 2018-02-04 17:26:05 · 1027 阅读 · 0 评论 -
算法设计——解决 3Sum 以及 3Sum Closest 问题
常写算法,多动脑,不会老!3Sum问题: 若不考虑效率问题,则解决该问题的思路就很简单直接,三个 for 循环遍历穷举即可。一个优秀的程序员肯定不能忍受这么无脑的时间复杂度,于是先想到先对全部数据进行排序操作,然后设置三个指针,数组的首尾各一,第三个指针从首位+1开始。设置合理的条件限制,移动指针。该过程中需要解决去重问题。废话不多说,贴代码:vectorvectorint>原创 2018-01-06 19:51:21 · 426 阅读 · 0 评论 -
贪婪算法解决 Integer to Roman 问题
常写算法,多动脑,不会老!理论太枯燥,先来个实际场景,场景取自 LeetCode 12 —— Integer to Roman 问题。要求能把 1~3999 的整型数字转化罗马数字。先科普一下罗马数字,如下表所示: 罗马字符 I V X L C D M 对应的阿拉伯数字 1 5 10 50 100 500 1000需要注意的是,罗马数字原创 2017-12-20 10:59:51 · 563 阅读 · 0 评论 -
LeetCode11——Container With Most Water
常写算法,多动脑,不会老!题目描述:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and原创 2017-12-19 16:58:12 · 323 阅读 · 0 评论 -
LeetCode 001 —— Two Sum
博主喜欢在闲暇时写点算法题目活跃活跃思维,之前在许多在线平台都有尝试过,比如北京大学的 POJ,浙江大学的 ZOJ,华为研究院自己研发的华为OJ等等,各有各的特色。最近很长一段时间华为OJ 平台外网登不上去了,很是遗憾,本着满腔热血,开启了 LeetCode OJ 平台的征战。这是在该平台的第一个题目,非常简单,也正好重温一下 C++ 基础知识。题目描述: 解题思路: 非常简单,若不是十分在意耗原创 2017-10-17 20:40:13 · 464 阅读 · 0 评论 -
华为OJ——输入n个整数,输出其中最小的k个
今天刷的这题比较简单,长时间没刷 OJ 了,今天那这个小题目练练手,回忆一下 C++ 相关知识。先上题目:示例代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(int argc, char *argv[]) { int count; int number;原创 2016-11-04 16:50:14 · 1070 阅读 · 0 评论 -
提取不重复的整数(桶排序思想)
描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 知识点 数组 运行时间限制 10M 内存限制 128 输入 输入一个int型整数 输出 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 如果返的整数以0开头,去掉0; 如 intput:1010 output:1 样例输入 9876673 样例输出 37689原创 2015-08-30 16:55:42 · 1703 阅读 · 0 评论 -
STL中map的简单应用(合并表序列)
描述数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和 函数说明:public int mergeRecord(List oriList, List rstList)数据表记录包含表索引和数值。请对表索引相同的记录进行合并,合并后表记录为相同索引表的数值求和。 @param oriList 原始表记录。 以List方式存放,TableRecord定原创 2015-08-06 10:52:42 · 4478 阅读 · 0 评论 -
整形数组合并(STL vector删除重复元素)
描述题目标题:将两个整型数组按照升序合并,并且过滤掉重复数组元素详细描述:接口说明原型:voidCombineBySort(int* pArray1,intiArray1Num,int* pArray2,intiArray2Num,int* pOutputArray,int* iOutputNum);输入参数: int* pArray1 :整型数组1 intiArray1Nu原创 2015-08-06 10:46:49 · 3672 阅读 · 0 评论 -
最大连续bit数
描述功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字 输出: 无 返回: 对应的二进制数字中1的最大连续数知识点位运算运行时间限制10M内存限制128输入输入一个byte数字原创 2015-08-04 11:12:03 · 756 阅读 · 0 评论 -
最长上升子序列
描述题目描述 Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗? 样例输入62 5 1 5 4 5 样例输出3 提示Example: 6个点的高度各为 2 5 1 5 4 5 如从第1格开始走,最多为3步, 2 4 5 从第2格开始走,最多只有1步,5 而从第原创 2015-08-01 16:35:40 · 668 阅读 · 0 评论 -
将真分数分解为埃及分数
描述分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。 接口说明 /* 功能: 将分数分解为埃及分数序列 输入参数: String pcRealFraction:真分数(格式“8/11”) 返回值: String pcEgpytFraction:分解后的埃及分数序原创 2015-07-30 17:11:48 · 2245 阅读 · 0 评论 -
字符个数统计
描述编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。知识点字符串,函数,指针运行时间限制10M内存限制128输入输入N个字符,字符在ACSII码范围内(0~127)。输出输出字符的个数。原创 2015-07-30 15:15:46 · 1512 阅读 · 0 评论 -
字符串排序
描述: 编写一个程序,将输入字符串中的字符按如下规则排序。规则1:英文字母从A到Z排列,不区分大小写。 如,输入:Type 输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入:BabA 输出:aABb规则3:非英文字母的其它字符保持原来的位置。 如,输入:By?e 输出:Be?y原创 2015-07-29 14:44:51 · 969 阅读 · 0 评论 -
公共字串计算
描述: 题目标题:计算两个字符串的最大公共字串的长度,字符不区分大小写详细描述:接口说明原型:int getCommonStrLength(char * pFirstStr, char * pSecondStr);输入参数: char * pFirstStr //第一个字符串 char * pSecondS原创 2015-07-28 14:15:03 · 618 阅读 · 0 评论