2019春招编程题目准备
SYSU_qsh
这个作者很懒,什么都没留下…
展开
-
LeetCode 腾讯精选练习50 题——1.两数之和
两数之和1. 题目: 2. 解法:1)暴力解法:两层循环,外循环遍历数组中的每一个数(记为a),内循环查找数组中是否存在一个数(记为b)使得a+b的值是否为target,且a和b在nums中的下标要不相同。【注意】这道题目可能设置了没有解的情况,所以在for循环外面还是要加一句return的,不然的话会报错“error: control reaches end of n...原创 2019-02-18 00:02:59 · 246 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——146. LRU缓存机制
题目解答这道题目的关键点在于:O(1)时间复杂度内完成查找的操作,虽然使用hash_map的话肯定可以实现O(1)时间复杂度的查询,但是如果只使用hash_map的话,我们这里就难以实现删除元素了。所以这里的想法是:应该使用链表的结构(list)来存储每一对(key,value),然后用hash_map来记录key对应的(key,value)在list中的迭代器,那么在put操作删...原创 2019-03-25 16:53:24 · 305 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——21. 合并两个有序链表
题目解答使用了一个辅助的头节点,这样就不用判断使用 l1 还是 l2 的头节点作为合并链表的头节点了。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ...原创 2019-03-25 15:39:15 · 204 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——20. 有效的括号
题目解答很经典的题目,应该不用讲思路了吧......主要就是记得是:遍历到左括号的时候把右括号入栈,遍历到右括号的时候再判断其与栈顶的括号是否相等,还有就是注意什么时候需要判断一下栈是否为空。代码如下:class Solution {public: bool isValid(string s) { stack<char> rec; ...原创 2019-03-17 10:32:01 · 249 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——15. 三数之和
题目解答直接用暴力遍历搜解的话时间复杂度为O(n^3),这个代码就不写了。我们这里考虑一下时间复杂度为O(n^2)的解法:首先对数组nums进行升序排序,然后遍历一次数组(重复的跳过),对于遍历到的每个数字curr找到其右边的数组中是否存在两个数字nums[i]、nums[j](i < j)使得nums[curr]、nums[i]、nums[j]三者之和为0,这里可以参考我之...原创 2019-03-12 12:49:49 · 226 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——16. 最接近的三数之和
题目解答这道题目还是使用了双指针的思想,关于双指针可以参考我之前的博客【Leetcode】167_两数之和 II - 输入有序数组。具体来说整个过程就是,先遍历一下数组nums,在每一次遍历中(假设当前遍历的数字为nums[i]),都设置左右两个指针(left = i+1; right = nums.size()-1),如果当前三个数(nums[i], nums[left], nums...原创 2019-03-16 12:08:58 · 226 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——11. 盛最多水的容器
题目解答1)解法一:从小到大遍历每个数ai,然后每一次遍历中,从距离当前ai最远的下标开始往靠近ai的方向遍历整数aj,一旦找到大于或等于ai的aj,则此ai对应的容器最大面积就是abs(j-i) * (aj -ai),继续执行下一次的遍历。因为看了标准答案后,发现这个解法的复杂度太高了,所以就不写出来了。2)解法二:双指针法。设置左右两个指针位于容器的最外两侧,每一次高度较小的一...原创 2019-03-12 10:56:22 · 243 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——9. 回文数
题目解答1. 一开始的想法是很直接的把整个数字每一位都存进数组,然后再同时从两边开始遍历这个数组,如下:class Solution {public: bool isPalindrome(int x) { if(x < 0) return false; int num[20]; int cou...原创 2019-02-26 17:22:50 · 225 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——8. 字符串转换整数 (atoi)
题目解答解答前看清楚题目给出的示例,有助于了解可能会出现的所有情况。按照题目的意思,可以成功转换为整数的例子应该是:1. 在整数(该整数可能会带‘+’或‘-’)前的字符必须都为空格2. 在整数部分中一旦出现不是数字的字符,该字符后面的字符都直接舍弃,不会进行转换第一次的时候因为不清楚,写的代码比较混乱,如下:class Solution {public: ...原创 2019-02-26 09:47:11 · 189 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——7. 整数反转
一、题目二、解法一开始是打算这么写的......没想到还有ans = ans*10 + x %10这样简单的性质。还有判断溢出(2^31=2147483648)时发现标准答案的很直接:class Solution {public: int reverse(int x) { int temp = x; int bit = 0; ...原创 2019-02-25 21:19:45 · 198 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——5. 最长回文子串
题目 解法(中心扩展算法)【注意】这里的expand函数里面之所以返回right-left-1而不是right-left+1,是因为在while循环结束后,得到的回文子字符串对应的起始位置应该为left+1、right-1,那么该回文字符串的长度为(right-1) - (left+1) + 1 即 right-left-1这个算法的主要思路是:遍历长度为n的字符串...原创 2019-02-25 22:22:36 · 218 阅读 · 0 评论 -
LeetCode 腾讯精选练习50 题——14. 最长公共前缀
题目解答1. 方法一第一个字符串和第二个匹配得出一个公共前缀后,再用这个前缀与下一个字符串匹配,重复下去到最后一个,代码如下:class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.size() == 0) ...原创 2019-02-28 22:32:56 · 376 阅读 · 0 评论 -
二叉搜索树转换为双向链表的非递归实现方法
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解答首先从根节点开始,一直遍历右子节点temp并把它们(包括根节点)依次压栈。然后再把栈顶节点出栈,判断当前目标双向链表的头(newHead)是不是空,如果为空则将出栈的第一个节点(即原二叉树的最右边的叶子节点)设置为newHead;不为空则将出栈的节点small和...原创 2019-03-31 16:50:24 · 448 阅读 · 0 评论