突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对应的随笔下面评论区留言,我会及时处理,在此谢过了. 过程或许会很漫长,也很痛苦,慢慢来吧. 编号 题名 过题率 难度 1 Two Sum 0.376 Easy 2 Add Two Numbers 0.285 Medium 3 Longest Substring Without Repeating C…
2020年腾讯实习生C++面试题&持续更新中(3) hello,大家好,我是好好学习,天天编程的天天. 来给大家大家分享腾讯实习生面经了. 天天希望大家看到面经后一定要做充分的准备,结合自己掌握的知识,把面试中的每一个问题都深入研究,找到面试官提问的重点,找面试管想要你回答的要点.并可以将自己整理的答案,整理处理,按照一定的逻辑分点作答. 比如: Q: 请你讲一下static这个关键字的使用 你一定要思考一下,组织一下自己的语言,然后给出面试官想要的答案. A:static在C语言和C++的用法…
2020年腾讯实习生C++面试题&持续更新中(2) hello,大家好~ 我是好好学习天天,天天编程的天天,一个每天都死磕技术,及时分享的技术宅~ 昨天分享的题目不知道大家是否看过了,以后我计划每天都更新一些互联网公司的面试真题,后期搞一个合集. 好了,接下来进入正题啦. 腾讯2020年实习生面试题分享 一面 虚函数.C++ 内存模型.深拷贝(拷贝构造函数.拷贝赋值函数) C++98/11/14/17相关的特性.智能指针 内存泄漏问题(new/delete, malloc/free, Valgr…
2020年腾讯实习生C++面试题&持续更新中(1) 腾讯面试整理(1) 最近大三的学生找实习生的同学非常多,给大家分享一篇腾讯实习生的面试题,关于面试题,会持续更新~~~ 也算是今天开通博客的第一次为社区的贡献. 一面: 多态怎么实现的 虚表虚机制是怎么回事 构造函数可以是虚函数吗?为什么? 析构函数可以是虚函数吗?为什么? const是函数签名吗?是.有什么作用?区分只读操作和赋值操作 C++11了解过吗? variatic template讲一讲 右值引用讲一讲 lambda讲一讲 智能指针…
2020年腾讯实习生C++面试题&持续更新中(5) 大家好呀,我是好好学习天天编程的天天~ 昨天一位小伙伴反馈已经拿到了腾讯offer,很是替小伙伴的激动~ 那今天还是持续给大家分享面经,希望可以帮助到更多的同学,大家也可以留言告诉我,你们的需求~ 腾讯面试一面: 自我介绍; 你是非科班的,说一下你的自学过程; 简单介绍一下你的项目; 项目用到了epoll,讲一下epoll的ET模式和LT模式; 讲一下epoll的oneshot? 惊群效应; 腾讯二面: 介绍一下项目; 项目用到了线程池,如何避…
1.除自身以外数组的乘积 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题.  题解:记录前缀积和后缀积.   参考代码: class Solution { public: vector<int> productExceptSelf(vect…
二叉树中的最大路径和 题目描述 给定一个非空二叉树,返回器最大路径和,路径指一条从任意节点出发,到达任意节点的序列,该路径至少包含一个节点,且不一定经过根节点 解题思路 树这一类数据结构我还不是很熟悉,需要更进一步的学习,以下思路来自于题解: 根据题意可知,一条最大的路径存在两种可能: 存在一个节点,一条最大路径等于该节点的左右子树中路径较大的一颗子树,加上它自己后向其父节点回溯 存在一个节点,一条最大路径包含其左右子树与其本身,不会再向父节点回溯 代码实现 package algorithm.…
求二叉树的最大深度, 基本思路如下: 设定一个全局变量记录二叉树的深度,利用递归,没遍历一层都将临时深度变量+1,并在每一节点递归结束后判断深度大小. 具体代码如下: package algorithm; import basic.TreeNode; public class MaxDepthOfTree { private int depth = 0; public int maxDepth(TreeNode root) { acquireDepth(root,0); return depth…
在二进制中,2的幂的数字用二进制表示时只会有一位表示为1,其余都为0,基于这个前提,可以有两种方案: 1. 做位移操作 2. 与数值取反并与原数值做与操作,判断是否与原来的数值相同 对于方案1,我的想法是对数值 n 先做一次右移的移位操作,然后在对右移后的数做左移操作,判断两次操作前后的数值是否相同,以下是代码: public boolean isPowerOfTwo(int n) { for(int i=0;i<32;i++){ int temp = n >> i; int large…
由于众数是指数组中相同元素的个数超过数组长度的一半,所以有两种思路,一. 先排序,后取排序后的数组的中间位置的值:二. 统计,设定一个变量统计相同元素出现的次数,遍历数组,若与选定的元素相同,统计变量加一,否则减一,如果统计变量减为0,则换下一个元素作为对比元素,这么做可行的原因是众数的数量超过数组一半的前提下,统计变量的累加次数是会大于减少次数的,这也就可以保证遍历完数组后统计变量值大于0对应的元素是所要找的众数. 时间复杂度对比: 排序,这里采用快排,时间复杂度为O(NlogN) 统计,时间…
事先说明,如果不是评论区的大牛一语点破,我可能还会陷在死胡同里出不来,这道题其实很简单,利用了任何一个学过二进制的人都了解的定理,即: 1. 异或操作满足交换律 : a ^ b ^ c 等价于 a ^ c ^ b 2. 0与任何数的异或都是数字本身: 0 ^ n = n 3. 相同的两个数的异或结果为0: a ^ a =0 基于以上三个定理,病结合数组中相同元素只会出现两次的前提,就可以得出,初始时设一个变量为0,记录异或结果,遍历数组,不断的执行异或,最终结果就是只出现一次的元素 public…
解题思路:归并 先把链表拆开,分为两部分,一直拆到只剩一个元素后,进行合并,利用一个临时节点记录重排后的链表的起始位置 合并不难,困难点在于如何拆分链表,自己的大体思路是利用两个指针,一个一次移动两位,一个移动一位,当移动快的结束时,慢的指针指向的位置就是链表的中间位置, 将中间位置往后的进行递归切割,然后将中间位置的下一个指针指向空,即断开链表,再对左边的子链进行递归. 边界条件就是当中间位置与起始位置重合时,就返回起始链表 代码如下: package algorithm; import ba…
根据题意,找到几何中的所有子集,说实话子集是没有什么头绪的,因为如果采用遍历的方法,稍有遗漏不说,代码的嵌套循环层数随着数组大小的增加而增加,想了很久没有头绪后就去看了看评论,然后就被点破了解题的关键:遍历数组时,让当前这一元素构成的集合,分别去加上之前找到的所有子集,由于第一次找到的子集一定有两个,一个为空,一个带有一个元素,那么用当前元素组成的集合分别加上之前的集合,一定会有一个集合只有当前元素 如图: 由于采用遍历的方式,对于数组长度为N,指针没往前走一次,要遍历的子集数量是原来的2倍,所…
贪心算法: 具体的解题思路如下: II 的解题思路可以分为两部分, 1. 找到数组中差值较大的两个元素,计算差值. 2. 再步骤一最大的元素的之后,继续遍历,寻找差值最大的两个元素 可以得出的是,遍历指针是一直向着数组的尾部移动的,由于要取得局部的最大差值,这一局部子数组中的元素一定是递增的,所以先找到递增结束的位置,那就是递增位置的起点,然后遍历至此轮递增结束时的位置,这样就得到了一个局部的最优解. 此思路由于指针只遍历一次,所以时间复杂度为O(N). 以下是代码: class Solutio…
今天的题目稍微有点复杂了,因为是K个有序链表的合并,看到这道题后的大体思路是这样的: 1.首先先做到两个链表的合并,链表的合并我想到的是用递归操作, 2.其次是多个链表的合并,所以在第一步实现的基础上,我考虑每次选择两个链表进行合并,一个链表数组作为一个整体,那么就可以采用归并算法进行合并,利用两个指针分别指向当前的数组位置,不断切分直到指针指向一个位置,再返回,然后进行合并,由于递归的操作,可以保证每次合并时只会有两个排序好的链表. 所以这辆的关键就是要搞清楚怎么递归去合并两个链表,以及如何递…
好吧,不得不承认,书上看到的始终不是自己的,只有亲身时间过才会明白该怎么操作. 找数组中第K个最大元素,简而言之就是先排序,不论使用哪种算法,都需要先排序,确认位置,由于数组可以通过下标直接访问,所以我打算将数组按逆序排序,选择算法方面,一开始打算使用大顶堆的堆排序,可是想了下,快排的性能会更好一点,所以就采用快排了 具体思路如下: 由于一开始为了让空间复杂度为O(1),所以踩了不少坑,最坑的就是找到中间位置,又要让比中间元素小的放在左边,又不打算移动中间位置,直接就崩了...惨惨惨. 言归正传…
根据题意,第一反应就是使用栈,左右括号相匹配,则将左括号出栈,否则将左括号入栈. 这里我用数组配合“指针”模拟栈的入栈与出栈操作,初始时指针位置指向0,表示空栈,凡遇上左括号则直接入栈,若遇上有括号,对比数组尾部的括号与右括号是否匹配,若不匹配直接返回false:否则将指针数值减1,若对比结束后,指针数值为0,则返回true,否则为false class Solution { public boolean isValid(String s) { if(s.length() ==0){ retur…
题目很简单,实现一个最小栈,能够以线形的时间获取栈中元素的最小值 自己的思路如下: 利用数组,以及两个变量, last用于记录栈顶元素的位置,min用于记录栈中元素的最小值: 每一次push,都比较min与x的大小,其次,push操作执行时若数组已满,这需要进行扩容,将数组长度扩大为原来的两倍,并进行数组的迁移.每一次 pop 时,若删除的是最小元素,则遍历数组重新找到最小的元素,然后删除栈顶元素. 时间分析: push: 最坏情况为O(n),其余为O(1) pop:最坏情况:O(n),其余为O…
螺旋矩阵 题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入:     [          [ 1, 2, 3 ],          [ 4, 5, 6 ],          [ 7, 8, 9 ]     ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入:     [          [1, 2, 3, 4],          [5, 6, 7, 8],          [9,10,1…
最长公共前缀 题目 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题. 思路 第一种思路O(n2):但是不符合题目要求 两层循环遍历,思路很简单不详细说了第一层遍历数组中中的每个数,第二层遍历求解除了本身之外的乘积. 第二种思路就是除法:也不符合…
两数相加 题目: 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 思路: 1.定义一个带头结点的链表同时定义一个指针指向该结点 2.定义两个指针分别指向两个链表的头结点 3.定义一个int的…
旋转链表 题目: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL 示例 2: 输入: 0->1-&g…
相交链表 题目: 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0).从各自的表头开始算起,链表 A 为 [4,1,8,4,5…
最长公共前缀 题目 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入…
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance 44.10% Meidum 475 Heaters  30.20% Easy 474 Ones and Zeroes  34.90% Meidum 473 Matchsticks to Square  31.80% Medium 472 Concatenated Words 29.20% Hard…
面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每次到底层的路径 int path[N]; //用一个布尔数组来存储每次已经遍历的点,默认是false bool st[N]; int n; //u表示当前的层数 void dfs(int u) { //当已经到达最底层了,溯回并输出路径 if( u == n ) { for(int i = 0 ; i <…
Python-LeetCode 是一个使用 Python 语言解决 LeetCode 问题的代码库,库有以下几个方面需要注意: 所有题目都是 AC 的: 按照题目顺序,每 50 个放在一个目录下,方便查看: 水平所限,无法保证每个题目都是使用的最好的算法: 对于链表和二叉树等结构,会配备测试代码方便本地调试: 部分题目会直接使用 Python 的标准库,比如进行一些别的计算之前,需要先对列表进行排序,这时候可能会直接使用 sort(); 部分题目在别的博客中解释了自己的解题思路,可以点击 这里…
题记:从知乎上看到的一篇文章,刚好最近工作中发现遇到的题目与这个几乎一样,可能就是从这里来的吧.^_^ 里面的答案没有细看,SQL求解重在思路,很多时候同一种结果可能有多种写法,比如题中的各科成绩取前三名,我是在看到这篇文章想到的另一种写法,不过题中的写法也可以做为参考学习.以此记录. 以下转自:https://zhuanlan.zhihu.com/p/72223558 这篇文写了挺久了,有一位细心的小伙伴滑稽发现了一个错误,很感谢有人认真的在看,我重新修改了一下! 很久之前我写过一篇学习sql…
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变换 0011 盛最多水的容器 0015 三数之和 0016 最接近的三数之和 0026 删除排序数组中的重复项 0027 移除元素 0031 下一个排列 0033 搜索旋转排序数组 0034 在排序数组中查找元素的第一个和最后一个位置 0035 搜索插入位置 0039 组合总和 0040 组合总和I…
Python语言上机题实现方法(持续更新...) 1.[字符串循环左移]给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符'a'.'b'移动到字符串的尾部,得到新字符串"cdefab",称作字符串循环左移k位.输入格式:输入在第1行中给出一个不超过100个字符长度的.以回车结束的非空字符串:第2行给出非负整数N.输出格式:在一行中输出循环左移N次后的字符串. 输入样例: abcd 2 输出样例: cdab [代码]: a…