leetcode
文章平均质量分 52
i_am_bird
这个作者很懒,什么都没留下…
展开
-
有N个孩子站在一条线上。 每个孩子都被分配一个评分值。你给这些孩子,每个孩子必须至少有一个糖果具有较高评级的儿童比邻居获得更多的糖果。 你必须给予的最低
本题源自LeetCode--------------------------------------------------------------------贪心算法1 初始化给每个孩纸一个糖果 2 从左向右扫描如果评分比前面的高 就比前面的糖果加13 从右向左扫描与 如果比前面的评分低,糖果比前面的多,就把前面的糖果变为后面的加1 int candy(vec原创 2017-10-07 09:12:55 · 2639 阅读 · 0 评论 -
沿着循环路线有N个加油站,其中i站的天然气量是[i]。你有一辆带有无限气罐的汽车,并且它的费用是从i站到我的下一站(i + 1).如果您可以绕电路行驶一次,则返回起始站索引
本题源自LeetCode=--------------------------------------------------------------------------------------1 定一个起始站start2 如果油量充足就向前走 end++ 否则就倒退一站。3 记录每站的消耗,不浪费已经遍历过的从尾开始 int canCompleteCi原创 2017-10-07 09:44:52 · 999 阅读 · 0 评论 -
复制无向图,用邻接表结构
本题源自LeetCode---------------------------------------------------------------------------------1 广度优先遍历 用队列2 用一个map存储节点与复制节点的对应,避免重复复制UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node)原创 2017-10-07 10:14:46 · 241 阅读 · 0 评论 -
将一个字符串s 切割成子串都是回文,最小的切割次数
本题源自LeetCode---------------------------------------------------------------------------------------用动态规划的思想1 用一个dp数组来存储子串(0,i)的最小切割次数,则最优解在dp[str.length()-1].2 如果当前子串是回文则dp[i]=0;否则dp[i]=i;3原创 2017-10-07 11:04:54 · 2458 阅读 · 0 评论 -
给定一个字符串s,求子串都是回文的集合。
1 用递归的思想 遍历划分子串,判断是否为回文 vector> partition(string s) { vector > result; vector path; partitionCore(s,result,path); return result; } void partitionCore(st原创 2017-10-08 08:58:58 · 1483 阅读 · 0 评论 -
给定一个二维数组包含X与O,将数组中与四边相连的O以及四边的O不变,其他O变为X
本题源自LeetCode-----------------------------------------------------------------------------------------------------------------------------------For example, X X X XX O O XX X O XX O X X原创 2017-10-08 09:37:07 · 2161 阅读 · 0 评论 -
给一个数组,找出数组中最长的连续数列的长度
本题源自LeetCode------------------------------------------------------------------------------------用hash表来解决这个问题,先初始化一个hash表, 存储所有数组元素, 然后遍历这个数组, 对找到的数组元素, 去搜索其相连的上下两个元素是否在hash表中, 如果在, 删除相应元素并增加此次查原创 2017-10-08 12:09:34 · 5788 阅读 · 0 评论 -
给定一个字符串只含有数字,判定这个字符串能表达的所有IP地址
本题源自LeetCode-------------------------------------------------------------------用三重循环遍历字符串,每个段的长度不能超过三,java代码: public ArrayList restoreIpAddresses(String s) { ArrayList result=new A原创 2017-10-18 09:22:06 · 5786 阅读 · 1 评论 -
图的逆向邻接表以及遍历
本题源自LeetCode----------------------------------------------------------------------------------大神的想法http://www.cnblogs.com/ShaneZhang/p/3748494.html=--------------------------------------------转载 2017-10-09 11:01:53 · 1322 阅读 · 0 评论 -
给定一个可能包含重复的整数的集合,S返回所有可能的子集。
本题源自LeetCode--------------------------------------------------------------------------------------大神的回溯法思路:http://blog.csdn.net/versencoder/article/details/52071930回溯法求解 1 传统的 内存超时: vec原创 2017-10-18 11:10:02 · 2846 阅读 · 0 评论 -
求二叉树的最小深度。
本题源自LeetCode----------------------------------------------------------------主要是考虑只有一个分支。递归: int run(TreeNode *root) { if(root==NULL) return 0; int left=run(ro原创 2017-09-30 11:20:12 · 336 阅读 · 0 评论 -
反向表达式求值
本题源自leetcode----------------------------------------------------------------------------------------------遇见操作数进栈,遇见操作符弹出俩个操作数运算,将结果压栈。 int evalRPN(vector &tokens) { stack valueStack;原创 2017-10-01 10:26:04 · 305 阅读 · 0 评论 -
给定2D平面上的n个点,找到位于同一直线上的最大点数
本题源自LeetCode--------------------------------------------------------二重遍历,第一次遍历确定一个点a,在遍历剩下的点b.分三种情况 1 a,b 重合 2 a,b 垂直 3 ,a,b是一条b/a 的直线。 int maxPoints(vector &points) { int length=point原创 2017-10-01 11:11:07 · 1383 阅读 · 1 评论 -
给定两个字符串和一个字典,从头到尾找到最短变换序列的长度,使得:一次只能改变一个字符每个中间词必须存在于字典中
本题源自LeetCode------------------------------------------------------------------------------给定的俩个字串和字典中的串是一张无向图,构造一棵图的树,广度遍历(按层)这棵树,每次改变开始串的一个字符,如果在字典中就入队列,并从字典中删除,防止重复。int ladderLength(string sta原创 2017-10-10 09:17:54 · 1699 阅读 · 0 评论 -
对链表排序 要求时间 复杂度为 O(nlogn) 空间复杂度为常量
考虑归并排序: 1 找出链表的中间节点,用快慢指针。 2 递归对左右子链表排序 3 合并俩个子链表 ListNode *sortList(ListNode *head) { if(head==NULL || head->next==NULL){ return head; } ListNode* middl原创 2017-10-02 09:57:05 · 2105 阅读 · 0 评论 -
对链表排序,用插入排序
本题源自LeetCode--------------------------------------------------------------------用插入法对链表排序非递归: ListNode *insertionSortList(ListNode *head) { if(head==NULL || head->next==NULL)原创 2017-10-02 10:23:59 · 195 阅读 · 0 评论 -
后序遍历二叉树
递归: vector postorderTraversal(TreeNode *root) { vector result; if(root==NULL) return result; PostCore(root,result); return result; } void PostC原创 2017-10-02 10:31:34 · 219 阅读 · 0 评论 -
前序遍历二叉树
递归 vector preorderTraversal(TreeNode *root) { vector result; if(root==NULL) return result; PreorderCore(root,result); return result; } void Pre原创 2017-10-02 10:59:36 · 241 阅读 · 0 评论 -
给一个队列L: L 0→L 1→…→L n-1→L n, 将他转变为: L 0→L n →L 1→L n-1→L 2→L n-2→… 。要求原地置换
本题源自LeetCode-------------------------------------------------------------1 先找到链表的中间节点,再将后半部分节点反转2 在将后部分节点 void reorderList(ListNode *head) { if(head==NULL) return ;原创 2017-10-02 12:52:32 · 761 阅读 · 0 评论 -
给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写。
本题源自LeetCode-----------------------------------------------------------------------先将字符串全部转换为小写字符, 从两端扫描字符串。暴力解决: bool isPalindrome(string s) { if(s.length()==0) return原创 2017-10-10 09:40:48 · 6354 阅读 · 0 评论 -
给定一个二叉树,找到最大路径和。该路径可以在树中的任何节点处开始和结束。
类是在一维数组中找到最大的子序列和。这里是根据左右子树int maxPath; int maxPathSum(TreeNode *root) { maxPath=INT_MIN; if(root==NULL) return 0; PreOrder(root); return maxPath;原创 2017-10-10 10:34:56 · 1370 阅读 · 1 评论 -
一个链表中,如果有环则输出环的入口节点,否则输出NULL
1 利用快慢指针,如果有环,俩个指针一定在环内相遇,否则没有环2 俩个指针相遇后,让其中一个从头开始遍历,另一个在相遇点遍历,相遇点记为入口点。代码: ListNode *detectCycle(ListNode *head) { if(head==NULL) return NULL; ListNode* slow=head;原创 2017-10-03 09:02:01 · 240 阅读 · 0 评论 -
给定一个字符串s和一个单词dict的字典,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。
1 暴力破解 双重循环 vector wordBreak(string s, unordered_set &dict) { vector result; if(s.length()==0) return result; for(int i=0;i<s.length();i++){ strin原创 2017-10-03 09:48:06 · 5726 阅读 · 1 评论 -
给定一个充满非负数的网格,找到从左上到右下的路径,最小化沿其路径的所有数字的总和。只能向下或向右移动。
本题源自LeetCode--------------------------------------------------------------------思路 动态规划1 如果 i=0并且 j!=0 则下一步只能向右走。2 否则j=0且i!=0 则只能下走。3 如果 i 和 j 都不等于0 则 选择向下 和向右 最小的那个。int minPathSum(vect原创 2017-10-27 09:34:05 · 1128 阅读 · 0 评论 -
给定一个列表,将列表向右旋转k个位置,其中k是非负数。
本题源自LeetCode-------------------------------------------例如:给定1-> 2-> 3-> 4-> 5-> NULL和k = 2返回4-> 5 - >1-> 2->3-> NULL。思路:1 先遍历整个链表求出长度len,因为 k 可能大于len2 将整个链表形成一个环,3 然后遍历链表,走到len-k处断开链表返回原创 2017-10-27 10:51:27 · 1501 阅读 · 0 评论 -
说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
用四个变量来表示俩次交易的买入卖出,遍历数组,比较每次交易的利益,保存最大的。 int maxProfit(vector &prices) { int len=prices.size(); if(len==0) return 0; int buy1=INT_MIN; int sell原创 2017-10-10 10:59:32 · 11522 阅读 · 0 评论 -
给定一个字符串s和一个单词dict的字典,确定s是否可以分割成一个或多个字典单词的空格分隔的序列。 s ="leetcode", dict =["leet", "code"].
本题源自LeetCode------------------------------------------------------------------------------1 双重遍历字符串,判断子串是否在dic他中2 用一个数组做标记,判断s[0-i]是否可划分为dict中的子串 bool wordBreak(string s, unordered_set &dic原创 2017-10-05 09:52:27 · 4319 阅读 · 0 评论 -
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
本题源自LeetCode--------------------------------------------1 先复制节点,让复制节点插入节点的后面。2 调整随机指针,复制节点的随机指针指向节点随机指针的下一个节点3 将链表拆分开 RandomListNode *copyRandomList(RandomListNode *head) { cloneLis原创 2017-10-05 10:42:39 · 1240 阅读 · 0 评论 -
给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
本题源自LeetCode-----------------------------------------------------------------------------int 整型共有32位,用bitnum[32]存储这n个数据每个二进制位上1出现的个数,再%3,如果为1,那说明这一位是要找元素二进制表示中为1 的那一位。 int singleNumbe原创 2017-10-05 11:10:38 · 6755 阅读 · 1 评论 -
给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
本题源自LeetCode------------------------------------------------------------------用异或 int singleNumber(int A[], int n) { int num=0; for(int i=0;i<n;i++){ num=num^A[i];原创 2017-10-05 11:16:21 · 2010 阅读 · 0 评论 -
给定一个三角形,从顶部到底部找到最小路径和。 每个步骤,您可以移动到下面的行上的相邻数字。
本题源自leetcode---------------------------------------------------------------------------从下往上遍历,上一层节点为下一层相邻节点的最小值加上当前节点。最后返回顶层节点 int minimumTotal(vector > &triangle) { int len=trian原创 2017-10-11 10:54:31 · 2444 阅读 · 0 评论 -
给定一个链表和一个值x,对它进行分区,使得小于x的所有节点都在大于或等于x的节点之前.保留两个分区中的每一个节点的原始相对顺序。
本题源自LeetCode------------------------------------------------------------例如:Given1->4->3->2->5->2and x = 3,return1->2->2->4->3->5.思路:先找到第一个大于或者等于给定值的节点p,然后将之后小于给定值的节点按顺序插入到p前面。 代码 :原创 2017-10-20 10:21:10 · 2134 阅读 · 0 评论 -
集合[1,2,3,...,n]总共包含n! 独特排列。 给出n和k 返回第k个排列。
本题源自LeetCode------------------------------------------------------------------------思路1:回溯法 会超时 string getPermutation(int n, int k) { vector dp; string tmp; backPat原创 2017-10-27 11:38:55 · 1238 阅读 · 0 评论 -
给定一个字符串s由大小写字母和空白字符组成,返回字符串中最后一个字的长度。 如果最后一个字不存在,则返回0。
本题源自LeetCode-----------------------------------------------代码 : int lengthOfLastWord(const char *s) { stringstream ss(s); string str; while(ss>>str); return st原创 2017-10-28 10:22:15 · 2075 阅读 · 0 评论 -
给定索引k,返回Pascal三角形的第k行。例如,给定k = 3,返回[1,3,3,1]。
暴力解决 :构造Pascal三角返回第K行 vector getRow(int rowIndex) { vector result; int a[rowIndex+1][rowIndex+1]; //构造Pascal三角 for(int i=0;i<=rowIndex;i++){ for(int原创 2017-10-11 11:20:55 · 256 阅读 · 0 评论 -
给定填充0和1的二维二进制矩阵,找到包含所有的最大矩形并返回其区域。
本题源自LeetCode-----------------------------------------------------------------思路:用求直方图的最大面积求解。遍历二维数组。统计当前行及以上的直方图,然后计算。保存最大面积。直方图的最大面积:用一个堆栈做数据结构,如果堆栈为空就将下标压栈,如果栈顶元素大于要入栈的元素,就将所有比入栈元素大的弹出,计算面原创 2017-10-21 09:38:50 · 3750 阅读 · 0 评论 -
给定一组不重叠的间隔,在间隔中插入一个新的间隔(如有必要,合并)。间隔最初按照起始时间进行排序。
本题源自LeetCode---------------------------------------------------思路 遍历间隔, 1 如果间隔小余要插入的间隔 则直接压入 2 如果有重叠则要合并,合并后的间隔,起始为最小的,结尾为最大的。3 如果遇到比要出入大的,就终止循环,然后把后面比插入大的间隔压入。vector insert(vector &interv原创 2017-10-28 11:05:19 · 1042 阅读 · 0 评论 -
给定一整数 n 产生一个 1 到 n*n的螺旋形数组
本题源自LeetCode------------------------------------------例如,假设n = 3,您应该返回以下矩阵:[ [1,2,3] [8,9,4] [7,6,5]]思路:即从四个方向构造数组 vector > generateMatrix(int n) { vector> result(原创 2017-10-28 10:00:37 · 1514 阅读 · 0 评论 -
数组的 连续子序列最大和
思路: 1 遍历数组,如果当前累加和小于 0 就让和等于0;否则就保留最大的当前累加和int maxSubArray(int A[], int n) { int sum=0; if(n==0) return sum; int maxSum=A[0]; for(int i=0;i<n;i++){原创 2017-10-29 10:08:58 · 468 阅读 · 0 评论 -
八皇后问题
思路: 首先我们分析一下问题的解,我们每取出一个皇后,放入一行,共有八种不同的放法,然后再放第二个皇后,同样如果不考虑规则,还是有八种放法。于是我们可以用一个八叉树来描述这个过程。从根节点开始,树每增加一层,便是多放一个皇后,直到第8层(根节点为0层),最后得到一个完全八叉树。 紧接着我们开始用深度优先遍历这个八叉树,在遍历的过程中,进行相应的条件的判断。以便去掉不合规则的子树。原创 2017-10-29 10:47:58 · 170 阅读 · 0 评论