摘要:
逆波兰表达式求值 逆波兰表达式求值 解题思路 使用堆栈数据结构,把数存进栈,当遇到运算符号的时候,弹出堆栈顶两个数,得到运算结果后再压入堆栈 知识点 堆栈 心得 这个很像编译原理中如何编译数字和运算符号的内容,也当作是一种复习了。 滑动窗口最大值 滑动窗口最大值 解题思路 这道题采用了一个单调队列, 阅读全文
摘要:
用栈实现队列 用栈实现队列 解题思路 用两个堆栈来实现,一个栈用于存储新存进来的,一个栈用于输出结果当队列 知识点 堆栈 心得 较为简单的一题 用队列实现栈 用队列实现栈 解题思路 只用一个队列,当需要pop的时候,将之前所有存进队列的值先弹出,再push进队尾 知识点 队列 心得 一开始想到这个思 阅读全文
摘要:
翻转字符串里的单词 翻转字符串里的单词 解题思路 先反转整个字符串,再消去多余的空格,最后再一个单词一个单词反转。消去多余的空格和找到单词则是使用快慢指针来解决 知识点 字符串,快慢指针 心得 我的思路是使用了快慢指针找到空格,然后用栈 题目2 右旋字符串 解题思路 跟前一题相似,将整个数组进行翻转 阅读全文
摘要:
反转字符串 反转字符串 解题思路 双指针法,跟反转数组,链表异曲同工 知识点 双指针,字符串 心得 复习了双指针的解法和string结构体在C++的使用。 反转字符串II 反转字符串II 解题思路 跟上一题一样,采用双指针,不过多一次循环遍历 知识点 双指针 心得 比较简单的题目 替换数字 替换数字 阅读全文
摘要:
四数相加II 四数相加II 解题思路 把大问题拆分成小问题,先把四个数组两两划分并遍历所有的可能,将其中两个数组的遍历结果存储在哈希表中,注意,该哈希表是通过值作为key,而该值的出现次数为value,随后遍历另外两个数组用哈希表来寻找解。 知识点 unorderd_map,哈希 心得 一道练习ma 阅读全文
摘要:
有效的字母异位词 有效的字母异位词 解题思路 创建一个大小为26的数组,每个数组代表着一个字母,通过统计两个字符串中字母的个数来得到最后的结果。统计方法为一加一减,在其中一个字符串中,每有一个字母存在,则在对应下标的数组加1,另外一个字符串就是 知识点 哈希,映射 心得 由于我对于哈希这类题目较为陌 阅读全文
摘要:
两两交换链表中的节点 两两交换链表中的节点 解题思路 由于是两两交换,解题的关键是临时的变量去存储next的指针,这也是昨天题目中所提到的方法。同时也用到了虚拟头节点,非常的方便。难点是在于如何判断交换结束,需要考虑next是否为空,如果后面没有凑够两个能交换的节点也需要停止。 知识点 虚拟头节点, 阅读全文
摘要:
移除链表元素 移除链表元素 解题思路 通过设置一个虚拟头指针,然后遍历整个链表,找到需要删除的内存移除就行,注意需要修改前一个链表的下一个指向 知识点 链表,指针,内存 心得 我没有用虚拟头指针,所以写的代码较为复杂。 设计链表 设计链表 解题思路 这是实现接口,考验基本功,一定要考虑头节点是否为空 阅读全文
摘要:
有序数组的平方 有序数组的平方 解题思路 最优的解法是通过双指针,由于该数组是一个非递减数列,我们只需要将数组的首尾两端作为两个指针的起始位置,然后进行比较就行。具体地讲,双指针所指向的值相互比较,把较大的值放入新的数组的开通,然后该指针往前(如果是在首端的指针,则往后)。重复这个过程直到双指针重合 阅读全文
摘要:
二分查找 题目链接 二分查找是一个较为基础的查找方式,对一个有序没有重复值的数组进行查找时,能够提供一个较好的时间复杂度\(O(log(n))\) 算法概要 对于有序并且没有重复值的数组来说,我们可以首先选定整个数组的中间下标,它的值则称为中间值,通过它把大数组分成两个小的数组,其中一个数组包含的全 阅读全文