LeetCode
学习是底线
这个作者很懒,什么都没留下…
展开
-
LeetCode58_最后一个单词的长度
C++实现:class Solution {public: int lengthOfLastWord(string s) { /*从后往前遍历,找到第一个不为空格的元素(第一个元素可能为空格),开始 计数至下一个空格*/ int res = 0; int s_size = s.size(); for(...原创 2020-03-27 12:19:03 · 72 阅读 · 0 评论 -
LeetCode53_最大子序和
在题解里学习的方法链接:https://leetcode-cn.com/problems/maximum-subarray/solution/zui-da-zi-xu-he-cshi-xian-si-chong-jie-fa-bao-li-f/解法1:暴力解法class Solution {public: int maxSubArray(vector<int>&...原创 2020-03-27 03:22:58 · 62 阅读 · 0 评论 -
LeetCode51_N皇后问题
知识点:全排列问题与N皇后问题都是两个经典的回溯算法的例子。回溯算法是有一个基本的框架流程。看到的一个特别详细的回溯算法博客:https://leetcode-cn.com/problems/n-queens/solution/hui-su-suan-fa-xiang-jie-by-labuladong/class Solution {public: vector&l...原创 2020-03-26 11:23:25 · 154 阅读 · 0 评论 -
LeetCode 48
知识点:数组+数学方法来自LeetCode题解。思路:矩阵转置+镜像翻转这个题拿过来的第一个思路,就是矩阵转置和镜像水平翻转, 类似下面的图像,拿样例中的第二个举例:所以这个题比较容易理解的方式就是转置和水平镜像翻转了,实现起来也比较简单, 遍历一遍二维数组,先进行转置,然后遍历一遍行,每一行逆序即可。C++实现:class Solution {public: ...原创 2020-01-10 09:57:41 · 101 阅读 · 0 评论 -
LeetCode 49
方法:map在原始信息和哈希映射使用的实际键之间建立映射关系。 在这里体现为,将单词字母按字母表顺序排列,若排列结果相同,则为字母异位词C++实现:class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { ...原创 2020-01-09 21:34:04 · 71 阅读 · 0 评论 -
LeetCode 50
方法1:模拟计算过程,直接将x连乘n次。如果 n<0n < 0n<0,我们可以用1x,−n\dfrac{1}{x}, -nx1,−n 代替 x,nx, nx,n 来保证 n≥0n \ge 0n≥0 。C++实现:class Solution {//方法:模拟该过程,将x连乘n次public: double myPow(double x, int n) {...原创 2020-01-09 14:51:02 · 117 阅读 · 0 评论 -
LeetCode 40
题解中的一个解答:这道题与上一问的区别在于: 第 39 题:candidates 中的数字可以无限制重复被选取。 第 40 题:candidates 中的每个数字在每个组合中只能使用一次。编码的不同,就在于,下一层递归的起始索引不一样。 第 39 题:还从候选数组的当前索引值开始。 第 40 题:从候选数组的当前索引值的下一位开始。相同之处:解集不能...原创 2020-01-07 20:56:20 · 90 阅读 · 0 评论 -
Leetcpde T39
知识点:数组 & 搜索问题 & 递归回溯 + 减枝算法在题解中看到的一个十分详细的解析:https://leetcode-cn.com/problems/combination-sum/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-2/完整的树结构:C++实现:#include &...原创 2020-01-06 11:13:49 · 142 阅读 · 0 评论 -
vector & set & map & unordered_set & unordered_set
背景:在此之前,自己对以上五个概念从未接触过,最近在刷LeetCode算法题,发现对这5个概念的考察频率极高,由此可见其重要性。在此仅做基础了解。1. Vector 容器类型有多种,这里的vector属于序列容器。有以下特性:(1)自动内存管理。可以动态地改变vector对象的长度,并随着元素的增加和删除而增大和缩小;(vector可看作是特殊的数组,它们的物理地址都连续,对array...原创 2020-01-02 09:48:46 · 673 阅读 · 0 评论 -
LeetCode T36_isValidSudoku
C++实现:解法1:采用unordered_map 与 unordered_set容器:class Solution {//哈希表(hashtable)public: bool isValidSudoku(vector<vector<char>>& board) { //使用unordered_map //vec...原创 2019-12-31 11:03:49 · 201 阅读 · 0 评论 -
LeetCode T33_search
解法1:暴力法C++实现:class Solution {//考查知识点:数组,二分法(binary search)public: int search(vector<int>& nums, int target) { //但这里首先想到的是暴力法,即顺序查找 int len = nums.size(); for(...原创 2019-12-30 17:51:47 · 60 阅读 · 0 评论 -
LeetCode T69_mySqrt
解法1:使用内置函数class Solution {public: int mySqrt(int x) { return sqrt(x); }};解法2:二分查找关于二分查找的思想:在下方视频实例中非常清楚。https://www.bilibili.com/video/av66215410?from=search&seid=17007...原创 2019-12-27 15:34:54 · 125 阅读 · 0 评论 -
LeetCode T12_intToRoman
在题解中看到的大佬的解法,真是感觉自己是个菜鸡,这里学习记录下他的解法。C++实现:class Solution {public: string intToRoman(int num) { int nums[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};//降序 st...原创 2019-12-27 10:19:04 · 96 阅读 · 0 评论 -
Leetcode T13_romanToInt
unordered_map是C++11新增特性,和map类似,都是存储key-value的值,类似于python中的字典。可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。需要包含头文件#include <unordered_map...原创 2019-12-26 21:08:38 · 68 阅读 · 0 评论 -
LeetCode T29_dvide
方法:举个例子:11 除以 3 。首先11比3大,结果至少是1, 然后我让3翻倍,就是6,发现11比3翻倍后还要大,那么结果就至少是2了,那我让这个6再翻倍,得12,11不比12大,差点就让刚才的最小解2也翻倍得到4了。但是我知道最终结果肯定在2和4之间。也就是说2再加上某个数,这个数是多少呢?我让11减去刚才最后一次的结果6,剩下5,我们计算5是3的几倍,也就是除法。C++实现:...原创 2019-12-25 21:59:56 · 93 阅读 · 0 评论 -
LeetCode T9_isPalindrome
视频讲解:https://www.bilibili.com/video/av75449979?from=search&seid=17157367179723200675C++实现:class Solution {//思路:先将数字转为字符串,然后反转字符串,最后比较两个字符串是否相等public: bool isPalindrome(int x) { ...原创 2019-12-25 21:06:31 · 76 阅读 · 0 评论 -
Leetcode T7_reverse
晚上看了程序员的职业规划,就程序员的发展:初级程序员、中级程序员、高级程序员这个过程,从上班开始,初级程序员的知识积淀大约需要3年时间,数据结构和算法是一个优秀的程序员必须掌握的知识。永久坚持学习编程。知识点标签:数学视频讲解:https://www.bilibili.com/video/av71082802?from=search&seid=1706803351602087584...原创 2019-12-25 20:41:18 · 158 阅读 · 0 评论 -
Leetcode T55_canJump
知识点:贪心算法分析:以nums = [2,3,1,1,4] 为例 i = [0,1,2,3,4] 表示nums中位置的下标索引 index = [2,4,3,4,8] 表示由当前位置可跳到的下一个位置,index=i+nums[i] jump = 0; 表示当前位置,jump的取值不超过index.si...原创 2019-12-25 09:43:04 · 187 阅读 · 0 评论 -
LeetCode T57_insert
C++实现:class Solution {//数组+排序public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { intervals.push_back(n...原创 2019-12-24 16:42:15 · 70 阅读 · 0 评论 -
LeetCode T75_sortColors
知识点:数组+排序方法:只针对本题nums元素为0,1,2的特殊性,先分别统计0,1,2的个数;再赋值C++实现:class Solution {//排序public: void sortColors(vector<int>& nums) { int count[3]={0},t=0;//定义整形数组并初始化0,count = [0,0,...原创 2019-12-24 10:45:50 · 61 阅读 · 0 评论 -
Leetcode T56_merge
知识点:数组+排序C++实现:class Solution {//数组+排序public: vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> res; //声明res ...原创 2019-12-23 21:31:35 · 44 阅读 · 0 评论 -
Leetcode T82_deleteDuplicates
方法:B站视频讲解:https://www.bilibili.com/video/av67806771?from=search&seid=12318799800086304651以 1->1->2->3->3->4->4->5为例以下是学习别人的C++代码:/** * Definition for singly-linke...原创 2019-12-17 20:03:06 · 157 阅读 · 0 评论 -
Leetcode T83_deleteDuplicates
方法:S1:定义指针变量cur指向当前节点,初始化指向头结点,cnext指向当前节点的下一个节点S2:判断cur和cnext指向的节点的值是否相等,如果相等,则让cur指向cnext的下一个节点,即删除cnext指向的节点;否则,cur指针后移一位,继续判断。这里cnext存在的前提是cur存在。让cur指向cnext的前提是cnext存在,所以需要进行判断。C++实现:...原创 2019-12-16 19:35:32 · 114 阅读 · 0 评论 -
LeetCode T31_permutation
知识点:数组理解字典序概念。具体做法以给出的序列 1 2 4 6 5 3 为例。要得到该序列的下一个字典序序列的具体做法:第1步:定义并初始化变量 i = num.length-2,然后从右边第一个元素开始往左比较;第2步:依次比较num[i]与num[i+1]大小,如果num[i] > num[i+1],则i--; 否则,执行第3步;第3步:定...原创 2019-12-16 15:15:19 · 86 阅读 · 0 评论 -
LeetCode T38_countAndSay
知识点:字符串+递归+循环记录:对题目的理解,最初看到题目的时候并没有读懂题意,1 12 11 //1(个)13 21 //2(个) 14 1211 //1(个)2 1(个)1规律,第n个序列的字符串只与第 n-1个序列的字符串有关,因此用函数递归实现的方式如下:clas...原创 2019-12-10 13:14:43 · 85 阅读 · 0 评论 -
LeetCode T34
知识点:二分查找(这里刚开始我与双指针的使用混淆了)方法:二分查找模板关于二分的视频讲解资料:https://www.bilibili.com/video/av62812410?spm_id_from=333.788.b_765f64657363.1简单总结下:二分问题一般是给出一个有序数组nums和一个目标值target,题目要求你找出target在nums中存在的位置的索引,如果不...原创 2019-11-29 16:45:08 · 47 阅读 · 0 评论 -
LeetCode T35_searchInsert
思路1:直接前向遍历一次,搜到相等或大于就返回该位置class Solution {public: int searchInsert(vector<int>& nums, int target) { int len = nums.size(); for(int i = 0 ; i < len; i++){ ...原创 2019-11-28 22:06:25 · 61 阅读 · 0 评论 -
LeetCode T20_isValid
问题:括号匹配方法:栈思路分析:核心思想: 利用栈的性质,先进后出,遇到左括号则压入栈,遇到右括号则与栈顶元素匹配,若匹配成功则将栈顶元素弹出,反之返回false。匹配方法: 利用map建立哈希表,实现括号一一对应关系。两种特殊错误情况:C++实现:class Solution {public: bool is...原创 2019-11-28 16:28:22 · 202 阅读 · 0 评论 -
LeetCode T24_swapPairs
思路:三指针+迭代step1: 对于链表处理问题技巧,首先添加一个哑节点dummystep2: 定义三个指针pre, cur, cur->next(cnext)分别指向链表哑节点, 第一个节点, 第二个节点step3: 改变cur和cur->next节点的值(如果存在),指针链路的断开与重新链接step4: 更新指针pre,cur(也隐示改变了指针cur->...原创 2019-11-28 09:12:06 · 101 阅读 · 0 评论 -
LeetCode T19_removeNthFromEnd
方法一:两次遍历算法思路我们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)个结点,其中 L是列表的长度。只要我们找到列表的长度 L,这个问题就很容易解决。算法首先我们将添加一个哑结点作为辅助,该结点位于列表头部。哑结点用来简化某些极端情况,例如列表中只含有一个结点,或需要删除列表的头部。在第一次遍历中,我们找出列表的长度 L。然后设置一个指向...原创 2019-11-27 17:28:11 · 153 阅读 · 0 评论 -
LeetCode T21_mergeTwoLists
思路:让指针l1,l2(没有显示定义)分别指向L1,L2链表,依次比较L1与L2对应节点上的值,将较小的值存入最后要返回的链表m中,并让指向该链表的指针后移1位,和指向链表m的指针p后移1位,再次进行比较......视频讲解:https://www.bilibili.com/video/av27108858?from=search&seid=7060049135870917198...原创 2019-11-26 20:56:04 · 3755 阅读 · 1 评论 -
LeetCode T2_twoSum
知识点:单链表解决思路:从表头开始相加,并记录每次相加的进位carry。代码思路:step1: 创建头节点,定义指针cur, 初始化进位变量carry=0//将p和q分别初始化为l1和l2的头部。step2: 循环遍历列表l1和l2,直到达到两端。 将x设置为节点p的值。如果p已达到l1的末尾,则设置为0。 ...原创 2019-11-23 15:23:45 · 75 阅读 · 0 评论 -
LeetCode T28_strStr
使用方法:库函数法#include<string>中包含一些处理字符串的函数,使用string库中的函数可以方便的解决此问题。class Solution {public: int strStr(string haystack, string needle) { if(needle.empty()) return 0;//使用empty函数判断字符...原创 2019-11-22 21:34:26 · 83 阅读 · 0 评论 -
LeetCode T27_removeElement
方法:双指针两个指针变量,一个用于遍历数组元素,另一个用于指向存放不相等元素的位置C++实现:class Solution {public: int removeElement(vector<int>& nums, int val) { //先判断数组是否为空 if(nums.size()==0){ ...原创 2019-11-22 14:11:59 · 66 阅读 · 0 评论 -
LeetCode T26_removeDuplicates
所用方法:双指针B站视频讲解:https://www.bilibili.com/video/av76144825?from=search&seid=7600986545073430717C++实现:class Solution {public: int removeDuplicates(vector<int>& nums) { ...原创 2019-11-22 11:30:14 · 135 阅读 · 0 评论 -
LeetCode T11_maxArea
方法:双指针用双指针遍历数组中的元素,通过数组中元素值的大小确定双指针的移动规则。C++实现:class Solution {public: int maxArea(vector<int>& height) {//height为输入数组,返回值类型int; //定义返回变量 int res = 0; //定...原创 2019-11-22 09:19:32 · 123 阅读 · 0 评论 -
LeetCode_T3_lengthOfLongestSubstring
背景知识:滑动窗口、哈系表这里是用数组实现哈系表,并不是严格意义上的数据结构——哈系表。使用HashMap来建立字符和其出现位置之间的映射,可以通过该字符直接找到它的存储位置。使用滑动窗和哈系表方法的思路:维护一个滑动窗口,窗口内的都是没有重复的字符,我们需要尽可能的扩大窗口的大小。所以窗口要不停向右滑动,在这个过程中我们只关心每个字符最后出现的位置,并通过哈系表建立映射。窗口的右边界就是...原创 2019-11-14 19:28:32 · 137 阅读 · 0 评论