算法/Leetcode/牛客
记录一些算法岗与代码能力提升的过程,准备面试
wbzhang233
已经毕业啦。无人机、机器视觉等领域不再接触了,平时工作繁忙,恕不回私信消息。
展开
-
面试真题录:判断一个节点数组是否在同一棵二叉树中?
某厂面试真题“给出一个树节点序列,判断该序列的所有节点是否在同一个二叉树上?”感觉面试官循循善诱,显然递归的方法更当时没想到啥好的解法,直接说了个遍历每个节点数组,进行层序遍历,统计以该节点为根节点的树的节点个数。(显然复杂度很高)或者说:判断一个节点node是否在某个给定的根节点为root的树上。(则可以交换互相判断,即可检验,两个节点均不在以对方为根节点的树上时,则认为两个节点不在同一颗树上。)先思考子问题,判断两个节点node1和node2是否在同一颗树上。判断一个节点node是否在一颗.原创 2020-10-04 16:32:34 · 477 阅读 · 0 评论 -
秋招结束之数据结构与算法总结
已经是9.30日,感觉互联网公司校招都快差不多了,自己刷的题也差不多了,之后还得做实验室的差事和专心做毕设,所以想要停止刷题好好总结了。本帖记录:1)数据结构总结2)算法总结1.数据结构总结主要以思维导图的方式进行总结,总结每一种数据结构的关联的常用技巧,以及一些对应的典型例题。笔者认为,根据思维导图,按图索骥,温故而知新,能够对数据结构有个大致的掌握,再具体了解一些技巧与特定问题。数据结构类型可分为线性和非线性:线性如数组、链表,其中队列和栈为操作首先的线性表非线性如树和图.原创 2020-09-30 22:57:03 · 823 阅读 · 0 评论 -
TOP-K相关问题总结
相信这类帖子在网上已经很多了,本帖很基础,仅对两个问题进行总结与收录:面试常考题:海量数据TOP-K笔试题:词频或者数字等TOP-K须知,面试与笔试还是迥然不同的,面试侧重于基础知识是否扎实与知识体系是否完善,笔试则纯粹是要快刀斩乱麻,能得分就行。1.面试题:海量数据TOP-K参考1)直接排序(不推荐,工程中不现实):如果内存足够,并且数据范围已知,可以使用计数排序(桶排序),否则通常不适用。2)分治:分成若干份,分别局部排序(可使用快排,注意内存限制),然后进行归并。3)局部淘汰.原创 2020-09-30 09:56:00 · 206 阅读 · 0 评论 -
石子的合并问题
这个问题备考到两次,分别是美团2020春招和腾讯2020秋招。以下为基于DP的题解…转载自他人。1. 线性(相邻)合并问题题目描述:一条直线上摆放着一行共n堆的石子。现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请编辑计算出将n堆石子合并成一堆的最小得分。Input输入有多组测试数据。每组第一行为n(n<=100),表示有n堆石子,。二行为n个用空格隔开的整数,依次表示这n堆石子的石子数量ai(0<ai<=10.转载 2020-09-20 09:00:21 · 691 阅读 · 0 评论 -
算法专辑0:脑筋急转弯
20200420 刷题,不可懈怠1.抛硬币甲乙双方互相投掷硬币,先得正面者获胜,问先投掷者获胜的概率?答案:2/3理由如下:甲先投,考虑甲乙各投一次的概率,甲获胜的概率为1/2,乙获胜的概率为1/4;剩余1/4进入下一轮。下一轮又重复以上过程,即取极限可得甲获胜的概率为乙的两倍;因而先投者获胜概率为2/3。2.Nim游戏题目详见leetcode。属于博弈问题。答案:...原创 2020-04-20 12:01:12 · 676 阅读 · 1 评论 -
算法专辑1:排序
1.知识点十大排序算法及其性质概览。摘自:Runoob十大排序算法2. C++实现2.1 冒泡排序最基础相邻两数交换。/** 1-冒泡排序 **/template <typename T>void bubbleSort(T nums[],int len){ for(int i=0;i<len-1;i++){ for(int j=0;...原创 2020-03-15 23:08:11 · 196 阅读 · 0 评论 -
Leetcode刷题1:初级算法
同另一篇文章,不过markdown用起来更方便。1.1 反转字符串知识点:就是双指针,对称进行交换,当p>q时结束。很简单。坑:c++ STL库掌握不牢。vector矢量的end()迭代器不是最后一个元素的指针,end()-1才是。void reverseString(vector<char>& s) { if(s.size()<1) retu...原创 2020-02-28 11:37:35 · 477 阅读 · 0 评论 -
算法专辑之素数相关问题
素数1.基础知识2.例题2.1 素数对原创 2020-08-07 17:30:04 · 196 阅读 · 0 评论 -
算法专辑2:动态规划
1.动态规划概述自己学太慢,参考别人的归纳:1)传送门12)2.例题2.1 爬楼梯如下:思路:考虑如何到达第N阶楼梯?必然从N-2阶楼梯迈上两步或者N-1阶楼梯迈上1步抵达;当然,N=2时,dp[2]=2;dp[1]=1;dp[3]=dp[1]+dp[2];依次类推,往后构成斐波拉契数列。即得方程dp[N]=dp[N-1]+dp[N-2]。代码如下: int cl...原创 2020-05-02 15:33:39 · 215 阅读 · 0 评论 -
算法专辑3:二分查找
摘自Leetcode基础教程1.二分查找核心思想:二分查找维护查找空间的左、右和中间指示符,并比较查找目标或将查找条件应用于集合的中间值;如果条件不满足或值不相等,则清除目标不可能存在的那一半,并在剩下的一半上继续查找,直到成功为止。如果查以空的一半结束,则无法满足条件,并且无法找到目标。其c++写法的标准模板如下:int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) ret.原创 2020-07-07 11:15:43 · 137 阅读 · 0 评论 -
算法专辑4:贪心算法
贪心算法贪心算法(又称贪婪算法,Greedy):在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。附加:c++ numeric库其中包含:求和accumulate、差分、向量内积、生成递增序列等功能贪心策略适用的前提:局部最优策略能导致产生全局最优解。基本思路:建立数学模型来描述问题把求解的问题分成若干个子问题对每个子问题求解,得到子问题的局部最优解把子问题的解局部最优解合成原来问题的一个解算法伪代码:从问题.原创 2020-07-16 14:23:24 · 280 阅读 · 0 评论 -
算法专辑5:回溯算法
回溯算法剑指Offer P881.基础知识2.例题2.1 矩阵中的路径2.2 机器人的运动范围原创 2020-07-24 23:23:17 · 115 阅读 · 0 评论 -
算法专辑6:优化时间与空间效率
记录一下用小空间来处理迭代或者递归问题。 #2.例题2.1 剑指Offer No.45 把数组排成最小的数P227思路:很明确,即考虑比较两个数字的排序先后。如32与3,可以组成323与332,则选择323.将两个数字转成字符串m、n,使用strcmp比较mn和nm即可。定义比较规则,使用sort函数进行排序。代码如下: struct myclass{ bool operator() (string s1,string s2){ return s1+.原创 2020-07-19 17:11:52 · 457 阅读 · 0 评论 -
算法专辑7:深度优先搜索
深度优先搜索算法2.例题2.1 岛屿的最大面积岛屿的最大面积解题思路:1)找到解空间,从一个可行解继续扩散2)从可行解周边扩散时,注意边界条件3)根据每一个可行解,更新最终解代码如下:class Solution {public: int getIslandArea(vector<vector<int>>& grid, int i,int j){ int res = 0; // 边界条件 i.原创 2020-07-19 23:21:37 · 114 阅读 · 0 评论 -
算法专辑8:位运算
常见的二进制操作和位运算1.基础知识请参考:位运算总结// 1.异或a=0^a=a^0a^a==0// 2.交换两个数a = a^b;b = a^b;a = a^b;// 3.移除二进制中的最后一个1a=n&(n-1)// 4.获得最后一个1diff=(n&(n-1))^n2.经典题型给定数组,其中只有某个数字出现1次(或者若干次,通常为2次或3次),或者两个数字出现多次…汉明距离:即求位1的个数交换两个数...原创 2020-07-29 11:30:17 · 121 阅读 · 0 评论 -
算法专辑总结
序言:2020.7.29,今天本该是好好写论文投稿的一天,可倒数日提醒我只剩34天就秋招了,一天天无法按计划行事…想想还是把过去几个月断断续续刷的数据结构和算法题好好总结一下。该文工作大致包括:XMind整理思维导图整理他人对算法的总结总结自己刷过的题目把握好接下来的节奏1.What is algorithm?2.他人对算法的总结2.1 algorithm-pattern该repo中附有很多书籍可供参考,建议fork。请参考链接:https://greyireland.git.原创 2020-07-29 11:22:02 · 139 阅读 · 0 评论 -
算法特辑之日历
这里是引用2.1 一年中的第几天一年中的第几天leetcode原题判断是否为闰年的公式如下:bool isLeapYear(int year){ return (year%4==0 && year%100!=0) || year%400==0 ; // 普通闰年和世纪闰年}原创 2020-07-20 23:01:01 · 127 阅读 · 0 评论