![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 60
lemon0910
写代码看书本做总结
展开
-
leetcode Longest Substring Without Repeating Characters
题意:给定一个字符串s,找出s中的一个最长子串t,在t中没有重复的字符。 思路:使用两个指针i和j,开始都指向第一个字符,向后移动j,直到发现j所指向的位置出现过一次。查看j - i的值是否是当前最大的,是的话更新保存的最大值。然后移动i,直到s[i] == s[j]停止,在移动过程中将i移动过程中记录的s[i]出现次数重置为0。然后重复j的移动,直到j大于字符串的长度。 代码实现#inclu原创 2013-05-31 23:41:17 · 344 阅读 · 0 评论 -
leetcode Longest Consecutive Sequence
题意:给定一个整数数组,找出数组中最长的连续整数。时间要求是O(n)。 思路:一看时间复杂度要求就想到了hash,第一次先进行初始化操作,时间复杂度为O(n),然后遍历查找,时间复杂度以为O(n),在c++中利用了STL模板unordered_sort,类似于hash。喜欢的同学可以自己查找一下。 代码实现:class Solution { public: int longestCon原创 2013-07-10 13:38:36 · 361 阅读 · 0 评论 -
leetcode Palindrome Partitioning II
题意:给定一个字符串s,将s进行分割,分割后每一部分都是回文串,求最少的分割次数。 思路:此题是一个DP问题,设dp[i]为i到字符串s末尾满足要求所需要的最少切割次数,j > i。当i到j为回文数时,我们判断dp[i] = min(dp[i], 1 + dp[j + 1])。 代码实现: class Solution { public: int minCut(string s) {原创 2013-07-09 13:28:02 · 368 阅读 · 0 评论 -
leetcode Palindrome Partitioning
题意:给定一个字符串s,找出s所有的子串组合,其中每个子串都是回文串。比如所s = "cdd",应该返回[["c","d","d"],["dd"]] [["c","d","d"],["c","dd"]]。 思路:遇见这种找出所有答案的题目,一般都需要搜索(dfs或者bfs),这样便能够找出所有的可能。个人感觉递归这种东西要多做几道题才会有感觉,如果只是看的话,下次遇见还是不会,建议原创 2013-07-09 16:05:41 · 353 阅读 · 0 评论 -
leetcode Sum Root to Leaf Numbers
题意:给定一个二叉树,从跟节点到每一个叶子节点产生一个整数,将产生的所有整数相加,返回最终的和。 解题思路:这道题还是利用dfs算法解决,通过递归遍历得到最终的结果。 代码实现: /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNo原创 2013-07-09 20:42:02 · 403 阅读 · 0 评论 -
leetcode Surrounded Regions
题意:给定一个2维字符数组,由字符'X'和'O'组成,找出所有被包围的'O'(O向左,向右,向上,向下走在走出边界前会遇到字符'X'),将这些被包围的'O'变换成为'X'。 思路:我们可以将2维数组的4个边界看成4个墙壁,从墙壁每一个字符为'O'处出发搜索,将每一个遇到的'O'做标记,直到越界或者遇见'X'的时候停止。然后重新遍历,将做标记的'O'处变换。 代码实现: class S原创 2013-07-09 20:14:56 · 382 阅读 · 0 评论 -
leetcode Longest Palindromic Substring
题意:找出一个字符串中的最大回文字串。 思路:如果字符串s中存在一个回文字串,那么它的逆串t中也存在着这个回文字串,那么我们可以求s和t的最大连续公共子串。 代码示例 #include class Solution { public: string longestPalindrome(string s) { // Start typing your C/C++ so原创 2013-06-01 01:02:31 · 544 阅读 · 0 评论 -
leetcode Median of Two Sorted Arrays
题意:给定两个排好序的数组A和B,长度为m和n,要求找到它们按顺序排好以后的中位数。时间复杂度为O(log (m + n))。 思路:中中位数其实就是找第k大的数,k = (m + n ) / 2。(奇数条件下,偶数条件下基本相同。)可以将题目转换成找第k大的数。 1,首先将两个数组合并,然后找到中位数。合并时间复杂度为O(m + n)。 2,不需要全部合并,只需要找前k个数,方法是比较两个原创 2013-05-31 23:18:45 · 710 阅读 · 0 评论 -
leetcode Two Sum
题目地址:http://leetcode.com/onlinejudge 题意:给定一个数组和一个目标值,在数组中找到两个数相加为目标值。 思路:1,最容易想到的就是暴力法。利用两个for循环遍历得到。时间复杂度为O(n2)。 2,先对数组排序,然后利用两个指针first和last指向头和尾,如果所指的值相加小于目标值就将first加1,否则的话将last减 1。直到f原创 2013-05-31 21:55:13 · 437 阅读 · 0 评论 -
leetcode Add Two Numbers
题意:给定两个数字,这两个数字用链表表示,每个节点保存一位数字,表头保存着个位数。求相加的和。 思路:模拟加法的原理,该方法也可以用于大整数相加,比如说1000为的整数相加,数字无法用任何类型保存,所以用字符串保存然后模仿加法。 代码示例:/** * Definition for singly-linked list. * struct ListNode { * int val;原创 2013-06-01 00:33:46 · 929 阅读 · 0 评论 -
leetcode ZigZag Conversion
题意:将一个单词排成倒的Z的形状。 解题思路:找规律。这种题目没有具体的算法。将n = 1,2,3,4,,,等情况全部列出,然后找相邻两个数之间的关系。建议大家还是自己去找,不然看了答案也没有什么提高。 代码:class Solution { public: string convert(string s, int nRows) { // Start typ原创 2013-07-02 17:40:32 · 395 阅读 · 1 评论