Leetcode
yanerhao
信雅之言,微言大意
展开
-
GO实现leetcode 股票利润最大化问题-动态规划
1 只允许一次交易,一次交易func maxProfit(prices []int) int { /* 动态规划 dp[i][j]代表第i天j状态(j=0表示当天不持有股票,=1则表示持有)下持有现金情况(如果是买入则为负数,卖出则是正数): 转移方程: 1第i天不持有股票,则存在两种情况: 1.1 昨天不持有,当日不做什么 1.2 昨天持有,当日卖出 dp[i][0]=max(dp[i-1][0],dp[i-1][1]+p[i])原创 2021-01-24 20:06:38 · 317 阅读 · 0 评论 -
堆及堆排序和应用-go实现
1 堆排序//heap/*根据树的性质,树节点前一半一定是分支节点(有孩子),故从这些节点开始调整出初始堆,,len(a)/2-1是第一个非叶子 */ func constructHeap(heap []int) { for i:=len(heap)/2-1;i>=0;i-- { adjustHeap(heap,i,len(heap)) } } /*每次调整使得满足堆定义 */ func adjustHeap(heap []int,start,length int)原创 2020-12-17 17:41:25 · 213 阅读 · 0 评论 -
leetcode 770 Basic Calculator IV题目解析
func basicCalculatorIV(expression string, evalvars []string, evalints []int) []string { index=0 //must have else commit alwalys fail however exe is right fmt.Println(expression) var res []string str = expression gEvalvars = evalvars gEvalints .原创 2020-12-18 22:29:39 · 401 阅读 · 1 评论 -
单调栈
单调栈:保持调顺序的栈。单调递增栈:从底到定从小到大排序,解决寻找最近的比本身值小的左或右的元素;具体来说:单调递增栈可以找到左起第一个比当前数字小的元素。比如数组 [2 1 4 6 5],刚开始空栈故2入栈,数字1入栈的时候,发现栈顶元素2比较大,1不能直接入栈否则破坏递增性,先将2移出栈,此时1入栈。那么此时说明2和1都没左起比自身小的数字。然后数字4入栈的时候,栈顶元素1小于4,于是1就是4左起第一个小的数字。此时栈里有1和4,然后数字6入栈的时候,栈顶元素4小于6,于是4就是6左起第原创 2020-12-06 16:34:00 · 230 阅读 · 0 评论 -
Leetcote 130. Surrounded Regions
130. Surrounded Regions题目要求:在一个二维平面上有至少被'0'或者'X'填满,要求当‘O’被'X包围时:除非'O'就在边界或者'O'临近的'O'也在边界,否则将被‘P’代替即只有在边界由‘O’连成的片区不会被改变为‘X’,其余位置的‘O’均会被改为‘X’;所以依次从每行的左右边界,每列的上下边界出发,检查元素,对于不能由‘O’改为‘X’的位置标记为'P';'这里原创 2017-05-18 22:32:16 · 304 阅读 · 0 评论 -
149. Max Points on a Line
149. Max Points on a Line对于含有一系列坐标点的向量,求此平面上某直线最多的点的数目。由平面几何知识:一个初始点+方向可以确定一条直线,故分两重循环:第一重是初始点a 第二重是剩余的某点b,由b: b与a重合,则a所在的所有的直线上的点都加1 b不与a重合,则构成一个方向,方向由斜率表示(对于垂直方向斜率无穷故单独考虑原创 2017-05-26 18:37:32 · 256 阅读 · 0 评论 -
109. Convert Sorted List to Binary Search TreeDescriptionHintsSubmissionsSolutionsTotal Accepted: 1
109. Convert Sorted List to Binary Search Tree与108题类似,给出一个单链表形式的递增序列,求高度平衡的BST,与108题不同的是,108题是递增数组,我们只要遵循:序列中间值是根,左区间的中间值是根的直接左孩子,右区间的中间值是根的直接右孩子:数组形式:TreeNode*buildTree2(vector&postorde原创 2017-05-06 16:27:33 · 373 阅读 · 0 评论 -
Leetcode84. Largest Rectangle in Histogram
84. Largest Rectangle in Histogram给定一个n长非负整数数组,每个元素值代表一个bar高度,求这些bar围成的最大矩形面积。思路如下:先假定数组是长为n的有序数组num,则这些bar高度从左到右依次增加,例如1,2,5,7,8,此时围成矩形面积将最大值:maxarea=max(num[0]*(n),num[1]*(n-1),...,num[n原创 2017-04-24 23:13:57 · 316 阅读 · 0 评论 -
Leetcode76. Minimum Window Substring
76. Minimum Window Substring给定一个主串s和匹配串t,要求主串中字串包含t串所有字符,求这样的最小长度字串。例如S = "ADOBECODEBANC"T = "ABC"则最小字串为“BANC”。1 这里引入HASH机制,即定义一个map a,记录t中每个字符出现的次数这里设置一个计数器cn;2 引入首尾两个指针i和l,之间就是包含字符原创 2017-04-23 18:18:58 · 416 阅读 · 0 评论 -
Leetcode的word ladder问题
127. Word Ladder题意如下:给定一个开始字符串和结束字符串以及含有大量字符串的字典,要求通过一定规则,能从开始字符串变换到结束字符串,求其最小变换字符串数目,该规则如下:1 从开始字符串开始,每次只变化一个字母2 改变一个字母后的字符串必须在字典内注意:1 如果没有这样的序列返回02 所有字符串相同长度3 所有字符串只有小写字母4 字典原创 2017-05-13 16:50:59 · 647 阅读 · 0 评论 -
201. Bitwise AND of Numbers Range
201. Bitwise AND of Numbers Range题目要求很简单,就是给定整数范围,求所有位与后的结果例如5-7:110101110位与之后为100即4再举个例子:26-30:11010 11011 1110011101 11110不难看出,它们都具有11xxx的形式,共同的高位比特是:11。如果进行按位与运算(原创 2017-07-30 21:41:29 · 246 阅读 · 0 评论 -
187. Repeated DNA Sequences
187. Repeated DNA Sequences题目大意是DNA序列由‘ACGT’自个字符自由组合而成,现在给定一个这种序列字符串,要求判断10个字符串长的连续字串出现次数超过一次的所有情况。Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",Return:["AAAAACCCCC", "CCCCCAAAAA"].思路:这道原创 2017-07-23 21:51:44 · 298 阅读 · 0 评论 -
Best Time to Buy and Sell Stock1/2/3/4
Best Time to Buy and Sell Stock1Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one原创 2017-07-23 23:57:59 · 373 阅读 · 0 评论 -
Leetcode Course S
207. Course ScheduleThere are a total of n courses you have to take, labeled from 0 ton - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course原创 2017-08-09 23:56:33 · 215 阅读 · 0 评论 -
208. Implement Trie (Prefix Tree)
208. Implement Trie (Prefix Tree)这一题完全就是数据结构里树的DAT,就是类似BST/AVL一样构造Trie树。一 概念Trie树又被称为字典树、前缀树,是一种用于快速检索的多叉树。Tried树可以利用字符串的公共前缀来节省存储空间。但如果系统存在大量没有公共前缀的字符串,相应的Trie树将非常消耗内存。构造如下:Trie 的强大原创 2017-08-06 19:48:05 · 416 阅读 · 0 评论 -
Leetcode 212. Word Search II
Given a 2D board and a list of words from the dictionary, find all words in the board.Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horiz原创 2017-08-10 23:03:45 · 287 阅读 · 0 评论 -
Leetcode最大形状面积的三题
84. Largest Rectangle in Histogram给定一个n长非负整数数组,每个元素值代表一个bar高度,求这些bar围成的最大矩形面积。思路如下:先假定数组是长为n的有序数组num,则这些bar高度从左到右依次增加,例如1,2,5,7,8,此时围成矩形面积将最大值:maxarea=max(num[0]*(n),num[1]*(n-1),...,num[n-1原创 2017-08-18 21:53:12 · 1145 阅读 · 0 评论 -
Leetcode2D平面DFS
给定一个大小不确定的2DP平面,一般用DFS。Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or原创 2017-08-18 21:43:32 · 226 阅读 · 0 评论 -
leetcode区间问题
区间问题在笔试过程中会问,这里总结如下:1 57. Insert IntervalGiven a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).You may assume that the intervals were initia原创 2017-08-23 20:49:53 · 2231 阅读 · 0 评论 -
Leetcode 97. Interleaving String
97. Interleaving String三个字符串s1,s2,s3,判断s3是前两个字符串交织所得例如:s1="aabcc",s2="dbbca",When s3 = "aadbbcbcac", return true.When s3 = "aadbbbaccc", return false.思路:本题也是一个多层问题返回单值,故引入动态规划,由于是针对两个字原创 2017-05-02 10:20:17 · 359 阅读 · 0 评论 -
Leetcode 68. Text Justification
68. Text Justification描述如下,要求从一个字符串数组,选择若干个单词组成一个新字符串,并相互之间对齐,注意以下几点:1 单词直接至少相差一个空格;2 每一行都要求左对齐;除了最后一行,其他行都要求右对齐,最后一个行,只要保证左对齐即可;3 每一行元素总数一定一样,若缺少用空格补,原则是要求左右空格数目均匀,若做不到均匀则左侧较多空格。例如:wo原创 2017-04-19 19:34:04 · 295 阅读 · 0 评论 -
leetcode Pattern
Given a pattern and a string str, find if str follows the same pattern.Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.Exampl原创 2015-10-22 11:42:53 · 403 阅读 · 0 评论 -
leetcdoe 帕斯卡尔三角形2 Pascal's Triangle II
帕斯卡尔三角形:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].原创 2015-08-13 14:37:15 · 487 阅读 · 0 评论 -
leetcode 判断两棵树是否一致Same Tree
思路:递归判断即可: bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p==NULL&&q==NULL)return 1; if(p==NULL||q==NULL)return 0; if(p->val!=q->val)return 0; else { return isSameTree(p->le原创 2015-08-15 13:55:21 · 1002 阅读 · 0 评论 -
leetcode 两个有序数组合成
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additio原创 2015-08-15 16:09:18 · 1021 阅读 · 1 评论 -
leetcode Valid Sudoku
判断是否数独,首先需要了解数独盘面:数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。由行、列、宫组成单元:行水平方向的每一横行有九格,每一横行称为行(Row),如图所示。列垂直方向的每一纵列有九格,每一纵原创 2015-10-18 21:19:24 · 318 阅读 · 0 评论 -
leetcode
你正在和朋友玩下面的Nim游戏:桌子上有一堆石头,每一次你们轮流取1至3颗石头。最后一个取走石头的人就是赢家。第一轮由你先取。你们俩都很聪明并且掌握玩游戏的最佳策略。编写函数,给定石头的个数,判断你是否可以赢得游戏。例如,如果堆中有4颗石头,那么你一定不会赢得游戏:无论你第一轮取走1,2,还是3颗石头,下一轮你的朋友都可以取走余下的所有石头。分析:当桌子上只有1或者2或者3个石头时原创 2015-10-14 19:11:42 · 414 阅读 · 0 评论 -
leetcode Add Digits
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one dig原创 2015-10-12 19:49:56 · 516 阅读 · 0 评论 -
leetcode Climbing Stairs
给定一个n阶数的梯子,每步可以跨1或者2阶,问最终上去的不同方法:分析:当阶数n=1,只有1种方法;当阶数n=2,有两种方法;当阶数n=3,其方法种数等于n=2的种数(剩下的1阶一步即可到达),再加上n=1的种树(剩下的2阶明显可以到达);当阶数n,其方法种数等于n-2的种数(剩下的2阶一步即可到达),再加上n11的种树(剩下的1阶明显可以到达);很容易知道是递归:in原创 2015-10-14 19:54:40 · 347 阅读 · 0 评论 -
leetcode Plus ONE
Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list.分析:这是一个进位加法运算,设置进位变量add,原创 2015-10-14 21:29:04 · 343 阅读 · 0 评论 -
leetcode Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3.这主要是单链表删除,涉及的是前指针和当前指针:原创 2015-10-14 20:57:33 · 343 阅读 · 0 评论 -
Leetcode 33. Search in Rotated Sorted Array
题目如下:Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found i原创 2017-04-06 11:04:20 · 420 阅读 · 0 评论 -
Leetcode 32. Longest Valid Parentheses
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.For "(()", the longest valid parentheses substring is "()", which ha原创 2017-04-05 22:32:29 · 238 阅读 · 0 评论 -
Leetcode29. Divide Two Integers
29. Divide Two Integers内容如下:Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.对于一般的32位OS,int 4字节 范围:2^31--2^31-1即-2147483648(INT_原创 2017-04-03 23:19:06 · 620 阅读 · 0 评论 -
91. Decode Ways
91. Decode Ways已知:‘A’---1‘B’--2...'Z'--26给出一个字符串例如“12”则有可能是当作“AB”(1 2)也有可能是“L”(12)故一共有2中看法。思路,很明显这是一个多层次影响求单值问题,可以采用动态规划:引入数组dp[i]表示s0,s1,...si-1这样前i个字符求法个数,注意字符串s每一位都有可能取值‘0-9’当原创 2017-04-28 23:05:36 · 257 阅读 · 0 评论 -
LeetcodeUnique Paths
62. Unique Paths本题是典型的迷宫问题,M×N的格子,从(0,0)出发,只能向下或者向右,求到达终点(m-1,n-1)的路径数目,首先想到的是递归回溯:void helper_robot(int m,int n,int&res,int x,int y){if(x==m-1&&y==n-1){res++;return;}if(x+1<m)helper_robot(m原创 2017-04-18 14:12:23 · 257 阅读 · 0 评论 -
LEETCODE60. Permutation Sequence
60. Permutation Sequence 内容如下:已知正整数n的全排列按照字典序:1 1232 1323 2134 2315 3126 321先给出n和k,即求n全排序的第k个排列一开始是采用回溯思想(回溯):string intTosting(vector ss){string s="";if(ss.size()<1)return s;原创 2017-04-17 16:42:26 · 281 阅读 · 0 评论 -
Leetecode 36 37 Sudoku问题
首先了解什么树sudoku,见http://sudoku.com.au/TheRules.aspx即在9X9棋盘里,每一行都要包括1-9数字,每个数字只能出现一次不能重复;每一列都要包括1-9数字,每个数字只能出现一次不能重复;每个3x3小宫格要包括1-9数字,每个数字只能出现一次不能重复。36. Valid Sudoku 主要是对已有的一个9X9棋盘(部分填充数字,没有数字的原创 2017-04-06 22:35:58 · 510 阅读 · 0 评论 -
Leetcode Container With Most Water
原题意思是:给定n个非负整数并记为ai,a2,,,,an,将下标i可以看成X轴横坐标,值ai看成纵坐标,与X轴会形成面积不一样的矩形,任意两条这样的线段和 x 轴组成一个木桶矩形,找出能够盛水最多的木桶,返回其面积。注意面积大小S=min(ai,aj)|i-j|最简单方法,暴力求解,时间复杂度O(n^2)int maxArea1(vector height){int n=原创 2017-03-04 23:22:03 · 319 阅读 · 0 评论 -
leetcode Ugly Number
检测一个数是否为丑陋数,所谓丑陋数就是其质数因子只能是2,3,5如6,质因数2,3故是如8质因数2,2,2,故是如14,质因数2,7,7不是,故不是bool isUgly(int num) { if(num<1)return 0; if(num==1)return 1; while((num%2==0)||(num%3==0)||(num%5==0)){ if(num原创 2015-10-14 21:10:17 · 259 阅读 · 0 评论