随笔分类 -  数据结构与算法

摘要:1、题目 2、分析 使用deque构造一个队列,只保留最大的几个数字。 3、代码分析 class Solution { public: class myQueue{ public: deque<int> max_queue; void pop(int value){ if(!max_queue.em 阅读全文
posted @ 2021-12-17 10:28 星光夜 阅读(59) 评论(0) 推荐(0)
摘要:1、题目 2、分析 用栈来解决问题 3、代码 class Solution { public: int evalRPN(vector<string>& tokens) { stack<int> result; int num1; int num2; for(int i=0; i<tokens.siz 阅读全文
posted @ 2021-12-16 10:02 星光夜 阅读(54) 评论(0) 推荐(0)
摘要:1、题目 2、分析 使用栈来实现这个结构,如果是左括号,则入栈,如果遇到对应的右括号,则左括号出栈,如果为空则再次入栈。 3、代码 class Solution { public: bool isValid(string s) { stack<char> pre; unordered_map <ch 阅读全文
posted @ 2021-12-13 16:39 星光夜 阅读(51) 评论(0) 推荐(0)
摘要:1、题目 2、分析 其实一个队列就可以了,就是我们使用一个队列,当需要查询stack头部的元素的时候,可以将其他元素弹出,然后压如的元素底部。 这样pop是O(n)的操作,而其他的是O(1)的操作(如果不考虑queue内部实现复杂度的话) 3、代码 class MyStack { public: q 阅读全文
posted @ 2021-12-12 10:38 星光夜 阅读(58) 评论(0) 推荐(0)
摘要:1、题目 2、分析 C++存在这样几种容器,vector,list, deque vector的优点是线性空间,随机存取的效率高,但是插入删除的效率不高。 list使用双向链表实现,空间不连续,但是插入删除的效率高,随机存取的效率不高。 deque综合了两者的优点,使用线性空间,随机存取的效率高,可 阅读全文
posted @ 2021-12-11 17:46 星光夜 阅读(60) 评论(0) 推荐(0)
摘要:1、题目 2、分析 按照官方的分析,可以按照其特点,验证是否存在整除的周期,然后对该周期进行逐个验证,但是这样复杂度为O(n^2)。 另外一种方法是两个s字符串拼接起来,这样s字符串一定是它的一个子字符串。 另外一个办法是,获得KMP算法的next数组,这样根据多个重复字符串的特点,进行一个规律的验 阅读全文
posted @ 2021-12-08 16:35 星光夜 阅读(67) 评论(0) 推荐(0)
摘要:一、题目 二、代码 class Solution { public: int strStr(string haystack, string needle) { if (needle.length()==0) return 0; if( haystack.length()< needle.length 阅读全文
posted @ 2021-12-07 10:56 星光夜 阅读(52) 评论(0) 推荐(0)
摘要:一、题目 二、代码 class Solution { public: string reverseLeftWords(string s, int n) { string start = s.substr(0, n); string end = s.substr(n, s.length()-n); e 阅读全文
posted @ 2021-12-07 09:58 星光夜 阅读(41) 评论(0) 推荐(0)
摘要:一、题目 二、代码 class Solution { public: string reverseWords(string s) { int count = 0; string result; string s_expand = ' '+s; int i = s_expand.size()-1; w 阅读全文
posted @ 2021-12-06 16:04 星光夜 阅读(56) 评论(0) 推荐(0)
摘要:一、题目 二、代码 class Solution { public: string replaceSpace(string s) { string result; for(int i=0; i < s.length(); i++ ){ if(s[i] == ' '){ result = result 阅读全文
posted @ 2021-12-06 15:08 星光夜 阅读(38) 评论(0) 推荐(0)
摘要:一、题目 二、分析 其实主要思路,仍然是先判断存在的整数周期,对其中前k个数字进行翻转,翻转可以参考之前的思路,进行双指针翻转,可以实现O(n)的复杂度。 另外一个方面,对于长度不满足2k的字符串,进行分别判断。 如果修改为迭代方式,那么需要考虑如何拆分字符串,保证最后能够返回完整的字符串。 另外一 阅读全文
posted @ 2021-12-05 20:40 星光夜 阅读(51) 评论(0) 推荐(0)
摘要:一、题目 二、代码 class Solution { public: void reverseString(vector<char>& s) { //长度 int string_len = s.size(); //这个也可以使用双指针翻转 int left = 0; int right = stri 阅读全文
posted @ 2021-12-04 16:33 星光夜 阅读(60) 评论(0) 推荐(0)
摘要:一、题目 二、算法 使用双指针 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; sort(nums.begin(), n 阅读全文
posted @ 2021-11-26 23:46 星光夜 阅读(53) 评论(0) 推荐(0)
摘要:一、题目 二、分析 主要难点在于去重,而且补充元素去重,而是排列去重,这个用哈希来实现其实我感觉比较困难,后来看他们推荐的算法,还是采用的双指针逼近来完成这道题目。 算法流程如下 算法复杂度分析如下 三、代码 class Solution { public: vector<vector<int>> 阅读全文
posted @ 2021-11-24 11:03 星光夜 阅读(71) 评论(0) 推荐(0)
摘要:一、题目 二、题目分析 这个其实跟之前那道四数之和的题目很相似,我们只需要使用一个map来记录其中一个字符串的字母以及它出现的次数,然后对于另外字符串,去遍历就好了。 因为最理想的情况是,赎金信上面的字符串需要是杂志上的字符串的子集,所以这个时候我采取的方式是遍历杂志的字符串的数目,然后再对赎金信上 阅读全文
posted @ 2021-11-23 11:25 星光夜 阅读(63) 评论(0) 推荐(0)
摘要:一、题目 二、算法分析 这里我们需要注意的是,是四个不同的数组,而且可能每个数组里面有重复的元素。但是我们需要返回的只有满足条件的数目。 按照别人的分析如下: 最好的方法是先使用一个Hashmap存储两个数组元素之和,并统计其出现的数目,然后遍历另外两个数组的元素之和。这样的算法的复杂度是最小的,只 阅读全文
posted @ 2021-11-22 14:16 星光夜 阅读(54) 评论(0) 推荐(0)
摘要:一、题目 二、参考代码 使用两个遍历和一个数组,数组大小为26,用来记录字母出现的次数,这样的想法很好,我当时想的时候,以为所有小写字母数字为24,所以导致内存访问错误。 参考代码如下: class Solution { public: bool isAnagram(string s, string 阅读全文
posted @ 2021-11-14 20:39 星光夜 阅读(52) 评论(0) 推荐(0)
摘要:一、题目 二、分析 这个题目很有意思,最开始我也没有想到很好的解法,但是发现题目使用的双指针方法很有效,就是利用快慢指针的方法去判断是否存在环,如果存在则使用其判断具体位置,这个和删除倒数第几个节点的那道题目很类似。 具体题目可以看这个分析: 题目分析 三、代码 /** * Definition f 阅读全文
posted @ 2021-11-13 20:48 星光夜 阅读(59) 评论(0) 推荐(0)
摘要:一、题目 这个题目目标太冗余了,其实我们要做就是返回相交的节点指针 二、分析 参考的方法,主要是确定两个链表对齐位置,逐个向后面比较,返回相等的指针即可 三、参考代码 一种比较简洁的解法: /** * Definition for singly-linked list. * struct ListN 阅读全文
posted @ 2021-11-11 16:38 星光夜 阅读(52) 评论(0) 推荐(0)
摘要:一、题目 二、分析 我最开始的想法是,先记录链表长度,然后确定对应节点的序号,然后删除,需要删除两个部分,空间复杂度为O(1),时间复杂度为O(2*n); 代码如下,需要注意如果删除节点出门在头节点的情况。 /** * Definition for singly-linked list. * str 阅读全文
posted @ 2021-11-10 23:32 星光夜 阅读(60) 评论(0) 推荐(0)