自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 OS 6.828工具安装 (Mac OS X)

MIT OS 6.828 course tools installation on Mac OS XEnvironmentPreparationInstalling the cross compilerThe official website of os 6.828 provide inadequate instructions to install JOS lab tools on OS X system. Here are records of my installation.Environment

2020-07-07 17:20:59 689

原创 c/c++ 指针管理的一些东西

当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称悬垂指针(也叫迷途指针)。Dangling pointer某些编程语言允许未初始化的指针的存在,而这类指针即为野指针。 Wild Pointer首先是空指针判断之类的,防止引用空指针这都很简单。最主要的是指针带来的内存泄露的问题。先看什么时候会销毁智能指针,太...

2019-09-07 19:00:50 309

原创 C++/C 编译链接过程

运行C++代码的过程分为预处理,编译,汇编,链接四个步骤(Preprocessing, Compiling, Assemble and Linking )一、预处理(Preprocessing)预处理过程处理所有的#开头的预定义语句,比如#include,#define宏等。从.cpp 或者.c文件生成.i文件gcc -E test.c -o test.i# orcpp te...

2019-09-05 11:41:55 211 1

原创 关于数组指针

自从知道了vector的增长规则后,觉得还是用数组靠谱。最近发现数组用起来有很多问题,数组和指针的区别,多维数组传参,数组指针和指针数组,函数指针,到了C++后还出现了数组的引用等等。搞得有点头疼。这里开一篇文章梳理一下。一、数组、指针以及引用复合类型(compound type),是基于其他类型定义的类型(《C++ Primer》p45)。数组指针引用都属于复合类型。数组(array...

2019-09-04 20:36:36 160

原创 滴滴笔试的一些记录

一、struct对齐编译过程中,从上到下编译:1.按照当前最长的元素申请空间2.按照当前元素长度对齐比如一个比较典型的例子struct node{ char a; //char a的时候,当前最大为1,申请空间为1,故a地址为0-1(相对node偏移) int b; //当前最大b为4,并且空间不够,所以按照4的倍数申请空间0-8,并且b需要对齐到4倍数的...

2019-08-28 08:39:05 497

原创 linux c语言的struct对齐方法

为了索引方便,数据放的位置都需要在其自身大小的倍数位置上。对齐规则:1)按照定义顺序,逐个变量进行对齐,起始地址为0。当前变量的起始地址必须为当前变量的字节数的整数倍。2)按照当前编译过的最大变量申请空间。初始空间为0。3)如果有嵌套结构体,则: 1、先在嵌套结构体内部按照规则1)2)进行对齐,得到嵌套结构体的大小,以及嵌套结构体内的最大变量的字节数 ...

2019-08-24 21:40:02 213

原创 关于字典序

今天刷到leetcode 440,发现有关字典序的一个方法:树。问题如下:给定整数n和k,找到1到n中字典序第k小的数字。注意:1 ≤ k ≤ n ≤ 109。示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。...

2019-08-22 21:51:02 355

原创 有关堆的知识

堆分为最大堆和最小堆。最大堆定义:一个二叉树,每个节点的值大于其子节点。最小堆相反。一般用数组来表示堆,当然,用树,链表都可以,想怎么来怎么来。数组d,有n个节点,其中一些下标定义:1)d[k]的子节点为d[2*k+1]和d[2*k+2],当然这里的2*k+1和2*k+2都得小于n2)最后一个父节点的位置:d[n/2-1]3)d[k]节点的父节点的位置d[(k-1)/2]有...

2019-08-18 20:02:42 227

原创 两个贪心算法——Leetcode321拼接最大数和Leetcode316去除重复字母

贪心算法和梯度下降法很像,每一步取当前最优解。但是得保证每一步取最优解,最后会取到全局最优解。首先看Leetcode316,去除重复字母。题目是这样的:给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: "bcabc"输出: "abc"示例 2:输入: "cbacdc...

2019-08-16 17:44:40 334

原创 二分法的下标

二分法通常涉及到一前一后的下标i和j,这个技术用在了很多算法上,比如找第一个大于x的数,快排等等等等。下标一不小心就容易出错,这里总结一些一些用法。一、找第一个>=target的数int i = 0, j = A.size() - 1, mid;while(i < j){ mid = i + (j - i) / 2; if(A[mid] < targe...

2019-08-14 19:51:57 324

原创 判断凸四边形_外积

两个向量的外积定义:a = (x1, y1) b = (x2, y2)a ✖️ b = x1y2-x2y1https://www.cnblogs.com/xiaojianliu/p/9964246.html具体参见上面博客。通过外积正负号,可以判定两个向量的相对位置,也就是夹角。夹角的性质,可以用来解决判别凸多边形,一个点在多边形内等问题。例如:判别凸多边形:向量每...

2019-08-12 22:18:16 2746 1

原创 wiggle sort和颜色分类

今天做了摆动排序二324。题目要求:给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序。网上一个解答:https://leetcode.com/problems/wiggle-sort-ii/discuss/77677/ono1-after-median-virtual-indexin...

2019-08-12 21:37:57 104

原创 数组中单独出现的两个数

数组中有若干个数,有两个数只出现一次,其余的数都出现了两次,求出这两个单独出现的数。leetcode260假设两个数分别为a和b,思路就是先每个异或,然后得出a和b相异的位,结果为ans然后取出ans最后为1的位,把原来的数组分开,再异或一次,得到答案。这里取ans最后一位1的操作很巧妙:ans = ans & (-ans)假设一个数ans为xxxxxxx10000...

2019-08-11 16:38:23 212

原创 数据结构类题目

凡是涉及到O(1)插入删除,然后还需要附带实现一个别的功能的(如获得随机数)绝对是hashtable + 链表或者数组或者别的数据结构。hashtable的key一般就是插入的值,然后value一般是有用的数据,如LRU里的链表的地址,如array里的下标等等。举个例子:O(1)插入删除并等概率随机返回一个数构建一个数组array,存插入的数构建一个hashtable,key是...

2019-08-08 19:04:56 134

原创 关于maxpooling和avgpooling

面试题经常会出maxpooling和avgpooling的优化,具体思路是1)对于avgpooling,使用动态规划2)对于maxpooling,使用队列维护历史最大值具体代码细节后续再补充。学习了这两种方法后,有点好奇真正的框架中是怎么实现pooling的,于是去找caffe的底层代码,发现并不是这样操作。具体操作思路:对于GPU上计算pooling,由于有大量的计算单元,可...

2019-08-05 11:50:30 5440

原创 回溯法

对于八皇后,求解数独这种有有限个解空间的题目,考虑回溯法。回溯需要有回溯的状态空间,以及回溯的节点。以数独为例回溯的每个节点为数独盘上的点,每个点上能放的数组为状态空间。递归即可解决。...

2019-08-04 15:29:33 86

原创 关于快速幂

对于一个数求幂,我们有下面的公式当n为偶数,当n为奇数,这里的除法是c++里面的整数除法。快速幂的代码:float power(const float x, const int k){ float result = 1, base = x; int p = (k > 0) ? k : -k; while(p){ if(p &amp...

2019-07-21 14:53:23 97

原创 leetcode 24点问题

遇到这种问题,建模是关键,想清楚怎么构建模型。class Solution {public: bool solve(vector<float> &nums){ if(nums.size() == 1) return abs(nums[0] - 24.0) < 1e-5; for(int i=0; i<nums.size...

2019-07-20 19:35:54 655

原创 dp 通配符匹配leetcode44

这一题是剑指offer里面的题目,但是书本里的解法自顶向下,不太好理解。假设string长度为S,pattern长度为P,设定状态dp,为 `dp[S+1][P+1]`状态含义:dp[i][j]表示pattern的1到j位是否匹配s的1---i位初始状态:dp[0][0] = 1dp[0][i] = p[i] == '*' && dp[0][i-1] 这里匹...

2019-07-20 10:45:23 91

原创 01矩阵541

找到每个元素距离0最近的距离BFS可以有很多个起点,思路要放开。以所有为0的点为起点,开始遍历。class Solution {public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int n = matrix.siz...

2019-07-19 22:15:09 80

原创 第k个排列的数.

关于排列的题目要分清楚里面的逻辑关系。假设现在剩余的字符数组为nums要取第k个排列,那么,第i位,取得就是nums里面的(k-1)/(i-1)! + 1位。class Solution {public: string getPermutation(int n, int k) { string result = ""; vector&l...

2019-07-18 22:55:46 107

原创 leetcode 162

二分法求极大值,居然一边ac,少有的感觉class Solution {public: int findPeakElement(vector<int>& nums) { int n = nums.size(); if(n == 0) return INT_MIN; if(n == 1) return 0; ...

2019-07-18 22:23:36 136

原创 关于数据溢出

回过头来看leetcode7,如何判定数据溢出。可以采用提前判定法,也就是判定溢出之前一步的状态,如果满足就溢出。class Solution {public: int reverse(int x) { int ans = 0; int a = INT_MAX % 10; int b = INT_MIN % 10; ...

2019-07-18 19:32:51 126

原创 关于进程和线程的面试题

在腾讯实习做了点多进程提取特征的工作就往简历上写...其实懂得也不深,自己挖的坑,能填一点是一点吧。一、进程和线程的区别:进程是系统进行资源分配和调度的基本单位线程时操作系统能够进行调度运算的最小单位,被包含在进程之中,是进程中实际运作的单位。区别:地址空间和资源:进程间相互独立,同一进程中的各个线程共享,某进程中的线程在其他进程中不可见通信:进程间通信使用管道等等,线程间...

2019-07-18 11:49:00 625

原创 leetcode1091 最短路径

神奇,居然只能用宽搜如果是深搜索的话,可能会错过最短路径。(最短路径用宽搜一定要记得)struct Node{ int x; int y; int length; Node(int x, int y, int length) :x(x), y(y), length(length){}};class Solution {public: int ...

2019-07-17 23:44:32 417

原创 关于二叉树的题目

对于非递归二叉树遍历,深度遍历使用stack,宽度遍历使用queue。模板:stack<TreeNode *> st; // or queue<TreeNode *> q;st.push(root);TreeNode *t;while(st.empty()){ t = st.top(); st.pop(); if(t){ st...

2019-07-16 21:41:50 103

原创 寻找二叉树最大深度104lc

今天头条面试遇到这道题,还要求出路径。非递归虽然很直观,但是要加上一个栈保存每个节点的深度。如果要非递归保存路径的话,还得加一个栈保存路径。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right...

2019-07-15 21:57:12 88

原创 lc74 搜索有序二维数组

这道题一开始以为纵向一次二分,然后再横向二分会比较快。但其实把整个数组展开,二分查找O(log(mn)) = O(logm) + O(logn),其实一样。两次查找的方法:class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { ...

2019-07-14 23:04:58 109

原创 leetcode 222——完全二叉树节点个数

二分法求解。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };...

2019-07-14 16:20:02 69

原创 Leetcode 43字符串相乘

这种题目看起来简单,但是逻辑实现起来也不容易。一开始,思路没有打开,容易陷入拆东墙补西墙的修bug过程。第一个版本啰嗦且没有可读性:class Solution {public: string multiply(string num1, string num2) { int n1 = num1.size(); int n2 = num2.s...

2019-07-13 20:28:02 54

原创 动态规划

这种题感觉难度极大,关键在于找到状态函数以及状态转移方程。leetcode32.Longest Valid Parentheses挺有代表性dp[i]代表s[:i],以s[i]为末尾的最长字串。当遇到----()的时候,+2,则为遇到有效的一对括号,则+2当遇到----))的时候,无法通过末尾判定是不是有效的。s[i-1]处,有d[i-1]长度的有效字符串,那么,只能越...

2019-07-09 22:42:48 61

原创 kth-largest-element-in-an-array_leetcode

这题用了快排的思想,思路如下:数组从小到大排序思想更为直观,所以一开始先k = n-k1)选一个pivot,然后把pivot放在合适的位置,也就是快排的Partion操作,把小于pivot的放前面,大于pivot的放后面。2)如果pivot的位置等于k,则返回pivot3)如果pivot的位置大于k,则证明要找的数在pivot前面,否则在后面,然后递归就可以了。特别的,如果le...

2019-07-08 23:26:32 87

原创 链表排序——单链表快排与归并

单链表有一个重要的特性,就是只能从前往后遍历。所以单链表的排序方法和普通的数组排序不一样。一、快排数组快排需要两个指针,一前一后往中间靠拢。由于单链表只能单向遍历,故需要设计不同的算法。设定p和q指针,并且规定p和q之间的数都是大于pivot的数(包含p)。1)p从start开始,也就是一开始p就是满足条件的p指针,q从p的下一个指针开始,也就是待判定的节点。2)当q的数大于等...

2019-07-08 21:51:22 139

原创 关于查找算法

二分查找算法最主要是确定递归的选择。有相应的模板可以套用:1)求中位值mid = (left + right) / 22)确定递归思路什么情况下递归[left, mid - 1],什么情况下递归[mid+1, right]一般题目都比较好分析。用leetcode的33题举例:int search(vector<int> &nums, int ta...

2019-07-08 20:51:39 110

原创 Sort character by frequency

注意字符串的操作,这道题就是把所有的字符统计起来,然后每次拼接找最大值static int fast_io = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return 0;}();class Solution {public: string frequenc...

2019-06-24 22:35:21 171

原创 Leetcode_find_k_pairs_smallest_sum

利用堆,维护当前最小值。vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) { auto cmp = [](pair<int, int> x, pair<int, int> y)...

2019-06-24 21:58:06 111

原创 堆_leetcode23,合并K个排序链表

利用堆排序,维护一个最小堆,取每个链表最前的节点组成堆,每次取出堆顶class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode *result = nullptr, *p = nullptr; auto cmp = []...

2019-06-24 21:05:17 87

原创 tfrecord读取数据踩得坑

#coding=utf-8import jsonimport numpy as npimport tensorflow as tffrom IPython import embedfile_queue = tf.train.string_input_producer( ['test.tfrecord'], shuffle=False, ...

2019-06-17 15:26:25 784

原创 leetcode_402_Remove K Digits

使用栈来解题。主要思想:一个n位数,如果第i位比第i+1位要大,那么删掉第i位得到的数要比删掉第i+1位得到的数要小。给定一个栈,result入栈过程:int i = 0;while(i < num.size()){ while(k && result.size() && result.back() > num[i]){ ...

2019-06-10 09:17:23 96

原创 Leetcode 697

#697 Degree of an Array虽然思路差不多,但是代码值得斟酌int cnt[50000];class Solution {public: int findShortestSubArray(vector<int>& a) { ios_base::sync_with_stdio(false); cin.tie...

2019-06-05 22:32:08 116

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除