![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面经中遇到问题
假老练啊哦
男性最大的魅力是幽默
展开
-
面试题:C++ stl中sort底层是如何实现的?
https://blog.csdn.net/qq_35440678/article/details/80147601https://blog.csdn.net/Hanani_Jia/article/details/82498469原创 2019-11-24 14:43:08 · 4358 阅读 · 0 评论 -
海量数据问题(二)
现在你有 10 个接口访问日志文件,每个日志文件大小约 300MB,每个文件里的日志都是按照时间戳从小到大排序的。你希望将这 10 个较小的日志文件,合并为 1 个日志文件,合并之后的日志仍然按照时间戳从小到大排列。如果处理上述排序任务的机器内存只有 1GB,你有什么好的解决思路,能“快速”地将这 10 个日志文件合并吗?有 10GB 的订单数据,我们希望按订单金额(假设金额都是正整数)...原创 2019-11-11 21:35:38 · 409 阅读 · 0 评论 -
滑雪 POJ - 1088
滑雪:POJ - 1088Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 71...原创 2019-10-31 16:15:16 · 201 阅读 · 0 评论 -
两个文件a,b,文件内部分别定义两个全局变量,编译的时候如何保证两个全局变量初始化顺序
同一个文件中的全局变量,按照顺序初始化;不同文件中的全局变量,编译器没有规定哪一些会先初始化。做法:两个文件a,b定义两个类A,B,把全局变量x,y的初始化放到类A,B中,其中类B的构造函数依赖于类A全局变量,保证B的初始化在A之后,即保证y在x之后初始化。//1.h#pragma once#include<iostream>using namespace std;...原创 2019-08-17 10:45:44 · 1281 阅读 · 0 评论 -
智力题
50个红球,50个白球,放到两个箩筐里,我随机的选一个箩筐,再随机的选一个球。怎么放,能让我拿到红球的概率是最大的。一个箩筐放1个红球,另一个放剩余的。拿到红球的概率 = 1/2 * 1 + 1/2 * (49/99) = 0.7564个马,8个赛道,最少多少次能找出前4名?64个马分成8组,A,B,C,D,E,F,G。首先进行8次比赛,将每个组后四名淘汰,此时8个小组每个组只有...原创 2019-09-08 10:51:42 · 1136 阅读 · 0 评论 -
dp经典问题——最长公共子串,子序列,以及一系列类似问题
学习来自这篇文章:动态规划经典——最长公共子序列问题 (LCS)和最长公共子串问题可以OJ的网站:[编程题]最长公共子序列LCS:Longest Common Substring 最长公共子串问题文章讲解的很清楚,主要要用dp数组,dp数组中存放的是长度为i的A串和长度为B的j串,它们两者之间的最长公共子串。所以就要看A[i-1]和B[j-1]相等不?如果相等,那么dp[i][j] =...原创 2019-09-07 16:00:32 · 252 阅读 · 0 评论 -
二叉树中的dfs
上周去华为面试的时候,遇到了一个自己以前积累过的dfs问题,当时觉得dfs的问题不需要搞懂每一步到哪里了,只需要大体上知道怎么弄套模板就可以,后来现场画那个dfs的图,以及每个状态的变化,虽然画出来了,但是觉得还是要好好思考下这些问题,毕竟面试时候人家更多是考察思路,而不是某个问题的具体解,不可能把所有问题都面面俱到,但是理解了问题才是最重要的啊!举个例子:leetcode :113. 路...原创 2019-09-06 10:07:23 · 3203 阅读 · 0 评论 -
给一个无限长链表,怎么随机抽K个数,保证每个数抽到概率一致——蓄水池抽样
类似:数据流,选K个数,怎么保证每个数抽取概率一样?转载:蓄水池抽样——《编程珠玑》读书笔记int random_pick(int m) { int ret = rand() % (m + 1); return ret;}void reservoir_sample(int* input, int * result, int k,int n ) { srand(time(NU...转载 2019-09-05 14:56:53 · 595 阅读 · 0 评论 -
在常数时间插入、删除和获取随机元素
设计一个集合,要求插入和删除都是O(1),并且可以等概率随机返回任意数字很巧妙的一个点:如何在O(1)删除?虽然你通过哈希表已经找到了这个元素,但是如果他在数组的中间?你要删除不调用erase函数,这样使得整个数组的位置都发生了错乱,并且不是一个O(1)的操作。解决办法:我们不需要从中把他删除,直接把找到的元素a给置换到数组的最后一位,然后pop_back就是O(1)了,当然这里不用真...原创 2019-09-05 14:22:33 · 365 阅读 · 0 评论 -
手写环形缓存区域,实现push,pop,front,back等函数
622. 设计循环队列class MyCircularQueue {public: /** Initialize your data structure here. Set the size of the queue to be k. */ MyCircularQueue(int k) { capcity = k; cnt = 0; front = 0; back =...原创 2019-09-05 11:47:37 · 611 阅读 · 0 评论 -
洗牌算法——将排序数组打乱的算法
参考:【算法】打乱有序的算法——洗牌算法排序算法已经很了解,但是还是第一次见到这种乱序算法。在游戏研发过程中,多少会遇到这样的需求, 在一堆数据中随机打乱后再分配出去,并且保证每个物品分配到每个人手上的概率都是1/n。这个是比较典型的洗牌算法。最普通的洗牌算法:利用一个额外数组B,在数组A中随机选择一个数,如果没有被选择过,就扔到B中,如果选择过了,就重新随机。时间复杂度O(n^2),...原创 2019-09-02 14:48:07 · 1381 阅读 · 0 评论 -
链表的插入排序
leetcode:147. 对链表进行插入排序/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution...原创 2019-08-25 11:04:06 · 120 阅读 · 0 评论 -
大小端,printf,%s,%d,%c,%x
unsigned type 和 type的区别unsigned int 和 int的区别,当我们用int定义一个变量时,实际上是在栈上申请了4B的空间,unsigned只是代表有符号还是没有符号,并不影响空间的大小,所以unsigned int 范围0~2³² = 0~0~4294967295,而int的范围是-2的16次~2的16次方 = -2147483648 ~2147483647。...原创 2019-08-21 22:31:16 · 1143 阅读 · 0 评论 -
单链表逆置
206. 反转链表输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL总结:要想逆置,要保存上一个结点,并且保存下一个结点。因为一旦逆置后,链表断开了,所以必须提前保存下一个结点。class Solution {public: ListNode* reverseLis...原创 2019-08-20 09:39:18 · 266 阅读 · 0 评论 -
c++实现文件目录查找
c++文件查找需要调用库:io.h,以及库中的两个函数:_findfist和_findnext文件结构体:struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_write; ...原创 2019-08-19 16:27:09 · 2109 阅读 · 0 评论 -
将二叉树展开成一个链表
将二叉树中序遍历展开成一个链表牛客网 26、二叉搜索树与双向链表的简化版void inorder(TreeNode* root, TreeNode*& pre, TreeNode*& head) { if (!root) return; inorder(root->left, pre, head); if (!head) { head = root;...原创 2019-08-17 17:45:11 · 285 阅读 · 0 评论 -
两个函数一个生成1概率为p,另一个生成0的概率为1-p,用这两个函数构造一个新函数,返回结果为0和1概率为1/2
func1 生成1的概率为p,那么不生成1概率为1-pfunc2 生成0的概率为1-p,那么不生成0的概率为p。情况一组合,发现都是p(1-p),则出现0,1概率为1/2.int getOneWithp(); // p概率生成1int getZeriWith1_p(); //1-p概率生成0int getZeroAndOne(){ while(1){ i...原创 2019-08-16 20:19:55 · 988 阅读 · 0 评论 -
数组排序,有0,1和2,需要就将0排在1之前,1排在2之前
p0,p1,p2分别表示第一个不为0的数字下标,第一个不为1的数字下标,第一个不为2的数字下标。p0,p1从0开始递增,如果p0>p1,则p1 = p0;p2从size()-1开始递减。当出现如下图的前三种情况,替换。因为替换了之后就保证了0在1之前,1在2之前的顺序。如果非上述三种情况,则依次赋值,比如2,0,1三种情况,没办法通过交换使它出现0,1,2.void sort(v...转载 2019-08-16 09:30:49 · 1200 阅读 · 0 评论 -
kmp
如何判断一个子串在母串中第一次出现的位置,如果要统计其出现的位置和出现的次数?转载:腾讯研发类笔试面试试题(C++方向)kmp算法最重要的就是,一旦发现了母串s和子串s的不匹配,不是将子串s向后移动一位,而是根据前面匹配信息向后移动多位,而这个多位获得就是根据next数组,next数组的求解方式如下:next数组是根据字符串前缀和后缀的匹配程度来确定的。①寻找前缀后缀最长公共元素长...转载 2019-08-11 11:43:37 · 240 阅读 · 0 评论 -
算法中ASCII码的积累
在算法题目中经常会遇到ascii值的问题,在构建一个字母哈希表,或者涉及数字和字符的时候等等。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 。常用到的几个数值:48~57为0...原创 2019-08-06 10:04:58 · 669 阅读 · 0 评论 -
不重复字符的最长子串
leetcode:3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出...原创 2019-08-06 09:10:10 · 116 阅读 · 0 评论 -
缓存策略LRU
146. LRU缓存机制LRU,Least Recently Used,最近最久未使用。常用于页面置换算法。如果是面试让写list就存放一个key就行了,保存的就是页面,会根据最近最久未使用把它给转换出去,cap就表示当前内存可容纳的最大页数。list和unorder_map实现:无论当前的key在不在链表中,都要把它放到链表首部,而且,单把一个结点放到首部很麻烦, 直接根据迭代器删除...原创 2019-08-05 09:50:12 · 612 阅读 · 0 评论 -
海量数据问题
1、给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL?50亿条URL,每天URL占用64KB。总共占用的物理内存是320G左右,不可能一次性导入到内存中。所以可以采用hash函数把大文件拆成小文件,这里可以利用hash函数拆分成1000个小文件,然后用哈希值做文件名,同理把B文件也做相同的操作,然后比较两个文件中文件名重复的文件,...原创 2019-07-25 20:33:58 · 564 阅读 · 0 评论 -
大数相加减,大数相乘(减法还没弄)
415. 字符串相加给定两个字符串形式的非负整数num1 和num2,计算它们的和。方法1:用字符串的解法,从低位开始对应相加,然后设置一个carry变量表示进位。每次得到的插入到现在结果开头就可以了。class Solution {public: string addStrings(string num1, string num2) { if(!num1....原创 2019-07-25 16:24:41 · 208 阅读 · 0 评论 -
实现sqrt,给定精度
二分法,注意溢出问题。double getSqrt(int x,double precision) { double left = 0, right = x; while (1) { double mid = left + (right - left) / 2; if (abs(x /mid - mid) < precision) return mid; e...原创 2019-07-25 08:30:21 · 1666 阅读 · 0 评论 -
【专题】旋转
旋转数组leetcode 189. 旋转数组 三次翻转,就地旋转。class Solution {public: void rotate(vector<int>& nums, int k) { if(!nums.size() || k<0) return ; k = k % nums.size()...原创 2019-07-24 16:24:36 · 76 阅读 · 0 评论 -
32位和IP地址的相互转换
IP地址:点分十进制数IP地址转换成32位整数先把IP地址中4个整数拆分出来,分别对每个整数用8位表示出来,设计到位运算取出最低位,32位数通过全局数组来存放结果。考察如何把二进制转成十进制数,十进制转换成二进制int a[32] = {0};int reserved[4] = { 0 };bool IpToInt(string s){ int num = 0; in...原创 2019-07-22 17:20:52 · 5512 阅读 · 0 评论 -
矩阵顺时针旋转90°(理解二维矩阵每一层访问元素的循环)
leetcode48题:旋转图象一开始看别人的答案写出来的,后来自己写的时候想了一下这种题目其实像一个找规律的题目,如果有下面一个二维矩阵:[1,2,3,45,6,7,89,10,11,1213,14,15,16]旋转之后的样子:[13,9,5,114,10,6,2,15,11,7,3,16,12,8,4]我们就观察1,2,3这三个数字旋转的变化:a...原创 2019-07-21 16:06:21 · 382 阅读 · 0 评论 -
两个有序数组中求第N大,求两个有序数组的中位数,两个有序数组找相同的数
4. 寻找两个有序数组的中位数有序数组中求第N大,求中位数题目解答两个有序数组找相同的数字没想法,感觉只想到建立一个哈希表,然后另一个数组去查查自己在不在哈希表中,有序的话还可以利用下元素大小,如果查到的某个元素已经大于了第一个有序数组的最后一个元素,就不用再往后查了。...原创 2019-07-20 16:46:16 · 308 阅读 · 0 评论 -
求一个二叉树的最小深度,最大深度。
104. 二叉树的最大深度111. 二叉树的最小深度推荐的写法:求一个二叉树的最大深度class Solution {public: int maxDepth(TreeNode* root) { if(!root) return 0; else return 1+max(maxDepth(root->left),maxD...原创 2019-07-17 21:52:09 · 810 阅读 · 0 评论 -
(☆☆☆)98、 验证二叉搜索树
leetcode:98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4...原创 2019-07-12 21:52:10 · 131 阅读 · 0 评论 -
链表的快排、归并排序
leetcode 148、排序链表在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5归并法:不断递归下去,最后再合...原创 2019-07-08 20:08:54 · 116 阅读 · 0 评论 -
内存拷贝——strcpy,memcpy,strcat,strcmp,memmove
c/c++的强大和可怕之处在于其直接操作内存,c标准库提供了大量这样的函数,比如strcpy,strcat,memcpy等,写的时候要注意dst和src地址覆盖的问题,否则结果将不可期。还要注意一下异常输入。strcpy函数char* strcpy(char* dst,const char* src){ if(!dst || !src) return NULL; ...原创 2019-07-07 17:25:09 · 786 阅读 · 0 评论 -
判断回文链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPali...原创 2019-07-06 16:47:31 · 110 阅读 · 0 评论 -
如何实现一个不能被继承的类
如果不能被继承,构造函数和析构函数要私有化。那么如何创建这样一个基类对象呢?只能在基类体中定义函数,调用构造函数,并且由于没办法调用构造函数,所以没有基类对象实例,只能通过static成员函数来调用。class finalclass {public: static finalclass* get() { finalclass * pa = new finalclass; retu...原创 2019-07-06 16:29:01 · 300 阅读 · 0 评论 -
(未完成)分发糖果(字节跳动围成一圈分糖果)
leetcode类似题目:135.分发糖果 题目解答n个小孩站成一排从左遍历到右,确定了相邻的数字,右边只要评分更高,糖果数就更多。但是题目:相邻的孩子包括左边和右边。所以再从右遍历到左,确定左侧得分高的话,并且左侧的糖果数不大于右侧,则为右侧+1;class Solution {public: int candy(vector<...原创 2019-06-28 21:41:59 · 1999 阅读 · 1 评论 -
(全排列问题,下一个排列)0123实现三个数字的全排列,非递归实现
permutations leetcode对应题目:46.全排列 题目解答47. 全排列 II (如果数组中有相同元素,返回不重复的,用set来做)31. 下一个排列 题目答案类似的题目:剑指offer27题: 27、字符串的排列总结:递归的方法很简单,使用回溯法;非递归的方法更像插入。题...原创 2019-06-27 20:41:58 · 1041 阅读 · 0 评论 -
在矩阵中左上角到右下角总步数
leetcode上题目:62. 不同路径dp,知道用什么方法就很简单了。注意!沿着边界的边的特殊情况。class Solution {public: int uniquePaths(int m, int n) { if (m<=0||n<=0) return 0; vector<vector<int>> dp(...原创 2019-06-27 17:17:09 · 581 阅读 · 0 评论 -
二叉树的遍历(先序,中序,后序,层序)
总结一下二叉树的遍历,利用模板的写法来写。二叉树的遍历分两种:DFS:先序,中序,后续 ---->利用栈stackBFS:层序 ---->利用队列queue144. 二叉树的前序遍历 前序遍历解答94. 二叉树的中序遍历 ...原创 2019-06-25 17:08:09 · 402 阅读 · 0 评论 -
排序算法
冒泡排序void bubble_sort_flag(int *L, int len) { int flag = 1; for (int i = 0; i < len && flag; i++) { flag = 0; for (int j = len - 1; j > i; j--) { if (L[j] < L[j - 1]) { ...原创 2019-09-18 09:17:45 · 70 阅读 · 0 评论