题解
qianji_little_boy
这个作者很懒,什么都没留下…
展开
-
求取一组无序数组中第k大的数
方法1.:维持一个大小为k最小堆, 后面来的数小或者等于堆顶元素,则跳过,; 后面来的数大于堆顶元素,堆顶元素弹出,新元素加入最小堆 最后留下的k个数就是,所有数中前k大的数,堆顶元素就是第k大的数 时间复杂度:由于维持大小为k的堆花费时间为log(k),所以时间复杂度为nlog(k). 代码如下: //构建最小堆,当前数比父结点小就往上冒 void bulidMinHeap(i...原创 2018-10-30 17:07:33 · 1277 阅读 · 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题解-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题解-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题解-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题解-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题解-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题解-9.回文数
回文数:link 1.题目分析 1.首先按照题意,负数是不可能是回文数的。 2.反转一个数字可能会出现的是溢出,在本题中有三种方法处理溢出; 法一:将数字转化为字符串tostr()函数。 法二:使用long long类型作为转化后的数可以避免溢出。 法三:只转化数的一半,reference 2.示例代码 class Solution { public: bool isPalindrom...原创 2019-07-20 22:05:20 · 627 阅读 · 0 评论 -
leetcode题解-3.无重复字符的最长子串
无重复字符的最长子串:link 1.题目分析 最长子串问题的两个常规套路 双指针,以某种策略移动着两个指针。 以每个位置作为开始或结束作为标准。 1、本题双指针的移动策略是两个指针之间不存在重复字符,使用map来查询,在本题中可以使用数组来代替。 2、以每个位置作为结束为标准。 2.代码示例 class Solution { public: int lengthOfLonges...原创 2019-07-17 23:01:57 · 81 阅读 · 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 评论 -
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题解-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题解-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题解-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题解-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题解-寻找两个有序数组的中位数
寻找两个有效数组的的中位数:link 1.题目分析 1.题目中有一个提示,要求时间复杂度是log的应该会想到是二分 2.有两个数组确定了一个数组划分的位置就可以确定另一个数组划分的位置。 很棒的题解link 1.划分的位置要满足条件L1 < R1 && L2 < R2 && L1 < R2 && L2 < R1;前两个条...原创 2019-07-18 22:22:18 · 85 阅读 · 0 评论 -
最长递增子序列LIS(Longest Increasing Sequence)
问题描述: 例:一个数组为[4, 5, 6 , 3]则最长的递增子序列为4 , 5, 6. 方法1: 动态规划, dp[i]代表一nums[i]结尾的,递增子序列的最长长度 dp[i] = max(dp[i], dp[j]+1), j的取值范围是0到i -1,所以时间复杂度是O(n^2) int lengthOfLIS(vector<int>& nums) { ...原创 2019-03-04 16:47:02 · 174 阅读 · 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 评论