leetcode
qianji_little_boy
这个作者很懒,什么都没留下…
展开
-
leetcode题解-3.无重复字符的最长子串
无重复字符的最长子串:link 1.题目分析 最长子串问题的两个常规套路 双指针,以某种策略移动着两个指针。 以每个位置作为开始或结束作为标准。 1、本题双指针的移动策略是两个指针之间不存在重复字符,使用map来查询,在本题中可以使用数组来代替。 2、以每个位置作为结束为标准。 2.代码示例 class Solution { public: int lengthOfLonges...原创 2019-07-17 23:01:57 · 81 阅读 · 0 评论 -
leetcode题解-9.回文数
回文数:link 1.题目分析 1.首先按照题意,负数是不可能是回文数的。 2.反转一个数字可能会出现的是溢出,在本题中有三种方法处理溢出; 法一:将数字转化为字符串tostr()函数。 法二:使用long long类型作为转化后的数可以避免溢出。 法三:只转化数的一半,reference 2.示例代码 class Solution { public: bool isPalindrom...原创 2019-07-20 22:05:20 · 627 阅读 · 0 评论 -
leetcode题解-8.字符串转化为整数
字符串转化为整数:link 1.题目分析 1.题目不难,主要分三步;找到第一个非空字符,解析出符号,解析数字部分,使用long long防止溢出。 2.示例代码 class Solution { public: int myAtoi(string str) { //找到第一个非空字符 int i = 0; while(i ...原创 2019-07-20 22:39:47 · 73 阅读 · 0 评论 -
leetcode题解-17.电话号码的数字组合
电话号码的数字组合:link 1.题目分析 组合方式随着数字的增多是呈现为树状发散的方式,主要就是代码实现了。 2.示例代码 class Solution { public: vector<string> letterCombinations(string digits) { map<char, string> num2characters = { {'1', "...原创 2019-07-30 21:58:27 · 231 阅读 · 0 评论 -
leetcode题解-18.四数之和
四数之和:link 1.题目分析 类似于三数之和,在本题中我么要固定两个数,去寻找满足条件的另外两个数,注意去除重复的组合。 2.示例代码 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin()...原创 2019-07-30 22:51:03 · 95 阅读 · 0 评论 -
leetcode题解-10.正则表达式
正则表达式:link 1.题目分析 1.题目中是要s与p匹配,应该会想到动态规划,然后就是确定初始条件和怎样从前往后推。 初始条件,前一个对一个不好处理的话,可以想下零个对零个的情况。 递推分析 case1 if(s[i] == p[j] || p[j]) == '.') dp[i][j] = dp[i - 1][j - 1]; case2 //有两种子情况 if(p[j - 1] !...原创 2019-07-22 23:31:50 · 105 阅读 · 0 评论 -
leetcode题解-13.罗马数字转整数
罗马数字转整数:link 1.方法一 从正向可以观察到,每一个独立的匹配都是贪心的匹配,为了避免使用大量的if 嵌套结构使用查表的方式。 class Solution { public: int romanToInt(string s) { map<string, int> roman2int = { {"I", 1},{ "II", 2 },{ "III"...原创 2019-07-27 21:07:14 · 118 阅读 · 0 评论 -
leetcode题解-24.两两交换链表中的节点
题目连接:两两交换链表中的节点 1.方法一 a. 题目分析 交换最开始的两个节点,后面的逻辑应该是一样的,所以可以用递归来实现。 b. 示例代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) ...原创 2019-08-07 22:54:30 · 91 阅读 · 0 评论 -
leetcode题解-23.合并k个排序链表
合并k个排序链表 1.题目分析 1.应该要想起之前合并过两条链表,那么我们就可以采用分而治之的方法。 2.可以使用一个最小堆,把所有的节点都压入其中,依次取出。 2.示例代码 思路一,分而治之 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex...原创 2019-08-06 22:37:57 · 112 阅读 · 0 评论 -
leetcode题解-最长有效括号
最长有效括号 1.题目分析 1.这种最长子串一般用dp实现,是以某个位置结尾,以某个位置开始;也可能会从后往前推。 2. 括号匹配,经常会使用栈;运算符中有括号也会使用栈。 2.示例代码 dp实现 class Solution { public: int longestValidParentheses(string s) { //以某个位置结尾的长度 ...原创 2019-08-14 22:04:41 · 91 阅读 · 0 评论 -
leetcode题解-16.最接近的三数之和
最接近的三数之和:link 1.题目分析 这个题和leetcode15题三数之和一样的思路,固定一个数,然后去寻找另外两个数,找到满足要求的的更新解。 2.示例代码 class Solution { public: int threeSumClosest(vector<int>& nums, int target) { //固定一个,另外两个是活动的...原创 2019-07-29 23:10:45 · 109 阅读 · 0 评论 -
leetcode题解-12.整数转罗马数字
整数转罗马数字:link 1. 题目分析 1,会第一时间想到查表。 2.还有一种减少表大小的方法。reference 2.示例代码 class Solution { public: string intToRoman(int num) { // bit decade hundred thousand vector<string> bit = ...原创 2019-07-24 23:09:40 · 119 阅读 · 0 评论 -
通用字符串匹配,动态规划
题目如下: 给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符。 '*' 匹配零个或多个前面的元素。 匹配应该覆盖整个字符串 (s) ,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。 示例 1: 输入...原创 2018-09-28 23:32:09 · 908 阅读 · 0 评论 -
位操作,找出一个数组中某个出现p次的数
题目:一个数组中一个数出现了p次,其余数出现了k次(p%k != 0),不用额外空间找出这一个数。 由于在电脑中,数是由位存储的,我们先考虑简单情况----只有一位的数(0或者1),我们对1进行计数,当计数器到达k时,归零, 设我们扫描数组遇到的数为i。假设这个计数器是一个m位的二进制数:xm, ..., x1。这个计数器有以下性质。 使用 x = x ^ 0 可以保证遇0计数器不变; ...翻译 2019-01-30 22:40:10 · 202 阅读 · 0 评论 -
leetcode题解-寻找两个有序数组的中位数
寻找两个有效数组的的中位数:link 1.题目分析 1.题目中有一个提示,要求时间复杂度是log的应该会想到是二分 2.有两个数组确定了一个数组划分的位置就可以确定另一个数组划分的位置。 很棒的题解link 1.划分的位置要满足条件L1 < R1 && L2 < R2 && L1 < R2 && L2 < R1;前两个条...原创 2019-07-18 22:22:18 · 85 阅读 · 0 评论 -
leetcode题解-5.最长回文子串
最长回文子串:link 1.题目分析 1.最容易想到的是从每个位置向两边扩展得到最长回文子串。 2.示例代码 class Solution { private: int start, len = 0; void extend_palindrome(const string& s, int i, int j){ while(i >= 0 &...原创 2019-07-18 23:05:20 · 93 阅读 · 0 评论 -
leetcode题解-11.盛最多水的容器
盛最多水的容器:link 1.题目分析 1.找两个柱子使体积最大,双指针策略,指针移动的方式不人容易想到,参考link 2.示例代码 class Solution { public: int maxArea(vector<int>& height) { int ret = 0; int left = 0, right = height...原创 2019-07-23 23:03:39 · 206 阅读 · 0 评论 -
leetcode题解-15三数之和
三数之和:link 1.题目分析 首先想到的是固定两个数最后去确定第三个数,时间复杂度为O(n2logn),最好的方法是固定一个然后使用twoSum的方法去寻找那两个,时间复杂度为O(n2),注意事项为要跳过重复的。 2.示例代码 class Solution { public: vector<vector<int>> threeSum(vector<int&g...原创 2019-07-28 22:38:06 · 89 阅读 · 0 评论 -
leetcode题解-1.两数之和
两数之和:link 1.题目分析 1.为了以O(n)的时间复杂度完成寻找,那么只能是遍历一遍或者多遍,而且在每个位置操作的时间复杂度是常数时间。 2.逆向思维,把找两个数转换成⟶\longrightarrow⟶查看每个数是否有与其相加之和瞒住条件的数 3.为了在常数时间内完成匹配查找,可以先遍历一遍预处理生成一个map<int, int> num2index,数到数组下标的映射。因为...原创 2019-07-16 23:03:56 · 79 阅读 · 0 评论 -
leetcode题解-2.两数相加
2.两数相加:link 1.题目分析 1.题目中很重要的一点是数是逆序存储的那么链表的头部就是数的个位,遍历链表和正常多位数的加法是一致的。 2.示例代码 class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* dummy = new ListNod...原创 2019-07-16 23:26:00 · 96 阅读 · 0 评论 -
leetcode题解-6.Z字型变换
Z字型变换:link 1.题目分析 1.思路比较简单,按题意将字符串分成几排,然后连接起来。 2.主要的是怎样让代码清晰生成这样几个字符。 2.示例代码 class Solution { public: string convert(string s, int numRows) { vector<string> row_strings(numRows, ""...原创 2019-07-19 22:49:32 · 97 阅读 · 0 评论 -
leetcode题解-7.整数反转
整数反转;link 1.题目分析 1.这个题主要的是溢出处理 2.因为负数范围大1,所以全部转化为负数来处理。 2.示例代码 class Solution { public: int reverse(int x) { bool negative = (x < 0); x = negative ? x : -x; ...原创 2019-07-19 23:37:33 · 79 阅读 · 0 评论 -
leetcode题解-在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 1.题目分析 1.很典型的二分查找,二分查找的主要是要找到一种策略,舍弃掉另一半不可能的数据。 2.在本题中出现了一种情况, eg: low = 1, high = 2, mid = 1; 而且 nums[low] = nums[high] = target; 在寻找上界的时候,由于mid可能会是上界,所以只能令low = mid; 结果陷入死循环;...原创 2019-08-15 20:41:38 · 155 阅读 · 0 评论