数据结构
文章平均质量分 65
面试中可能会用到的数据结构与算法知识,采用python或c++实现
hioog
这个作者很懒,什么都没留下…
展开
-
记intel
模拟 inner join:归并的思路#include<bits/stdc++.h>using namespace std;int main(){ vector<pair<int,char>> list1 ={{1,'a'},{2,'b'},{2,'c'},{3,'d'}}; vector<pair<int,char>> list2 ={{1,'e'},{2,'f'},{3,'g'},{4,'h'}}; int p1原创 2022-04-15 14:51:55 · 99 阅读 · 0 评论 -
记google面试(应该暂更)
个人介绍+项目经历+重点介绍一个项目coding题目:求某个排列在所有全排列中的索引。(索引从1开始)Given a certain permutation of n literals (e.g. BCDA is a permutation of literals ABCD). Find out its index of this permutation in the full permutation of these n literals when sorted in alphabetical or原创 2022-01-12 16:15:02 · 284 阅读 · 0 评论 -
一份数据结构的快速review
每次面试前我都要重新回顾下题型,找下手感。我觉得基础和经典题型必须会写等等,面试时候沉着应对,一步步思考就可以。以下内容仅供个人复习参考。首先是最基本的数据结构:数组和字符串(顺序存储)涉及两大类问题:查找:1)顺序查找;2)二分查找;3)哈希查找;排序:八大基础排序常用技巧:双指针法(做题下来,感觉可以分为头尾指针or快慢指针,注意下两者的循环终止条件,理解头或尾,快或慢分别代表什么就可以了)。滑动窗口(其实是高级点的双指针,可以解决很多子字符串匹配和子数组问题)。其中,滑动窗口的整体原创 2022-01-06 17:12:44 · 403 阅读 · 0 评论 -
Hulu面试(或许待更)
2022/1/5首先是电面,时长一小时。自我介绍+项目介绍+实习内容+中间穿插问题。coding:反转链表、k个一组翻转链表(lc原题改进,不同之处在于不满k个也要反转,细节比较多)面试官人很好,面试体验很好。...原创 2022-01-06 12:35:47 · 875 阅读 · 0 评论 -
二分查找总结
查找和排序可以说基本功中的基本功了。其中包括顺序查找O(n)、二分查找O(logn)、哈希查找O(1)。下面总结二分查找的基本题型,仅供个人学习交流。首先,二分查找一定是在数组有序的情况下进行的。寻找一个数在这里插入代码片...原创 2021-12-22 18:55:25 · 292 阅读 · 0 评论 -
记微软面试
我是三月份就做好笔试,由于个人时间问题顺延了,但好像给我标漏了不管怎样,终于赶上了最后的补录面试吧----------------------------分割线------------------------------------------2021/6/7 11:00-11:45first round全程英文面,面试官英语超流利个人介绍介绍一个自己的项目以及项目的难点(业务的东西没有深问编程:给定一个整型数组,找出和为正数的子数组个数。就首先想到的就是暴力了呗,时间复杂度为O(n2n^原创 2021-06-09 21:26:47 · 535 阅读 · 2 评论 -
单调栈和单调队列总结
总结下面经中常考的栈和队列题目,仅供个人日后复习。用两个栈实现队列用两个队列实现栈根据栈的压入序列能不能得到给定的弹出序列包含min函数的栈以上题目告诉我们:要适当构建辅助栈。另外,还有一种单调栈的简单数据结构。单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。单调栈用途不太广泛,只处理一种典型问题,即next greater element。Leetcode 496:下一个更大元素 I题目描述:给你两个 没有重复元素原创 2021-03-23 21:58:22 · 311 阅读 · 0 评论 -
二叉树的七种遍历
(一)首先先说下解题中常遇到的二叉树种类:满二叉树完全二叉树二叉搜索树平衡二叉搜索树(AVL树)C++中map、set、multiset、multimap的底层实现都是平衡二叉搜索树(红黑树),所以map、set的增删操作时间复杂度是logn,注意unordered_map、unordered_set底层实现是哈希表。Python中map(二)然后再是二叉树的存储方式:链式存储顺序存储(三)最后来到本文的重点二叉树的遍历方式。深度优先遍历:前、中、后序原创 2021-03-09 10:15:00 · 362 阅读 · 1 评论 -
基本算法之堆排序
算法思想堆排序是一种选择排序。堆的定义堆的定义如下,n个关键字序列L[1…n]称为堆,当且仅当该序列满足:1) L(i) >= L(2i) 且L(i) >=L(2i+1) 或2) L(i) <= L(2i) 且L(i) <=L(2i+1) (1=< i <= ⌊n/2⌋ ,即向下取整)因此,堆是一棵顺序存储的完全二叉树。满足条件1)的堆称为大根堆,大根堆的最大元素存放在根节点。满足条件2)的堆称为小根堆,根节点是最小元素。堆排序堆排序的思路很简转载 2021-03-04 14:32:31 · 1340 阅读 · 2 评论 -
基本排序算法总结
选择排序:简单选择排序堆排序交换排序:冒泡排序快速排序插入排序:直接插入排序折半插入排序希尔排序其他归并排序基数排序下面我们通过时空复杂度、算法的稳定性、算法的过程特征三个角度出发进行上述排序算法的总结。 从时间复杂度来看,简单选择排序、直接插入排序和冒泡排序平均情况下的时间复杂度都为O(n2n^2n2),且实现过程也较简单。但直接插入排序和冒泡排序最好情况下的时间复杂度都可以达到O(nnn),而简单选择排序则与序列的初始状态无关。希尔排序作为插..原创 2021-03-02 22:41:49 · 164 阅读 · 0 评论 -
基本排序算法之基数排序
算法思想实现算法分析原创 2021-02-27 13:53:44 · 457 阅读 · 0 评论 -
基本排序算法之希尔排序
算法思想实现Python实现:C++实现:算法分析原创 2021-02-24 16:09:01 · 563 阅读 · 0 评论 -
基本排序算法之归并排序
算法思想”归并“的含义是将两个或两个以上的有序表组合成一个新的有序表。假定待排序表含有n个记录,则可将其视为n个有序的子表,每个子表的长度为1,然后两两归并,得到[n/2][n/2][n/2]个长度为2或1的有序表;继续两两归并。。。如此重复,直到合并成一个长度为n的有序表为止,这样的排序方法称之为2路归并排序。实现算法分析...原创 2021-02-24 11:06:08 · 163 阅读 · 0 评论 -
基本排序算法之快速排序
目前为止的三种排序:直接插入排序、冒泡排序和简单选择排序都是o(n2n^2n2)的运行时间。虽然冒泡加入标志位优化和直接插入排序都可以在最好情况下为o(n2n^2n2),但是在最坏情况和平均情况下,性能还是o(n2n^2n2)。还有复杂度为o(nlogn)的更好算法,这些算法的秘诀就是分而治之的策略。本文介绍面试中一定盲写都要会写的快速排序。快速排序属于交换排序的一种。算法思想快排的基本思想是基于分治法的:在待排序表L[1…n]中任取一元素pivot作为基准(通常取首元素),通过一趟排序将待排序表划原创 2021-02-23 18:51:08 · 425 阅读 · 0 评论 -
基本排序算法之直接插入排序
直接插入排序属于插入排序算法的一种,也是最简单最直观的一种。插入排序的基本思想是每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。由插入排序的思想可以引申出三个重要的排序算法:直接插入排序折半插入排序希尔排序本文介绍直接插入排序。具体可参考链接:https://cuijiahua.com/blog/2017/12/algorithm_2.html算法思想为了实现表L[1…n]的排序,可以将 L(2)~L(n)依次插入到前面已排好序的子序列中,初始L(原创 2021-02-23 11:02:13 · 458 阅读 · 0 评论 -
基本排序算法之冒泡排序
冒泡排序是交换排序的一种。所谓交换,是指根据序列中的两个元素关键字的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法很多,包括冒泡和快排。算法思想从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。我们称它为第一趟冒泡,结果是将最小的元素交换到待排序列的第一个位置(或将最大的元素交换到待排序列的最后一个位置),下一趟冒泡时,前一趟确定的最小元素(或最大元素)不再参与比较,每趟冒泡的结果是把序列中的最小元素(或最大元素)放到了序列的最终位置…因此这样最多需要n-1原创 2021-02-22 20:52:27 · 516 阅读 · 0 评论 -
基本排序算法之简单选择排序
算法思想简单选择排序是一种选择排序。选择排序:每一趟(如第iii趟)在后面n−i+1n-i+1n−i+1(i=1,2,,n−1i=1,2,,n-1i=1,2,,n−1)个待排序元素中选取关键字较小的元素,作为有序子序列的第i个元素,直到第i−1i-1i−1趟做完,待排序元素只剩下1个,就不用再选了。具体可参考:https://cuijiahua.com/blog/2017/12/algorithm_5.html实现Python实现:def swap(lyst:list,i:int,j:int)-原创 2021-02-22 17:28:19 · 254 阅读 · 1 评论