自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kang_TJU的博客

潮平两岸阔,风正一帆悬

  • 博客(37)
  • 收藏
  • 关注

原创 leveldb-编码

参考这个链接[ leveldb源码剖析–编码],把为什么要编码以及如何编码讲的比较清楚。 我再简单记录下我自己的学习心得。主要是回答几个问题,回答清楚就行了。 为什么要编码? 假设key = “hello”, value=”world”,对于这个pair,你应该怎么存储呢?显然直接存成一个字符串可以。但是,那么怎么知道谁是key谁是value .所以,建议的存储方式:key_len, ke

2017-08-30 13:52:39 442

原创 leetcode-8-String to Integer (atoi)

问题题目:[leetcode-8]思路说下思路,虽然做了一个半小时。不过思路基本上一直都是正确的。这个题目应该反复写下,应为要考虑的情形是比较多的。大的思路是找到第一个pattern出来,然后围绕这个pattern处理。主要处理三部分逻辑:抽出pattern符号处理越界代码class Solution {public: int myAtoi(string str) {

2017-08-29 15:37:07 347

原创 leetcode-7-Reverse Integer

问题题目:[leetcode-7]思路这个题翻转之后要小心越界的情况。代码class Solution {public: int reverse(int x) { if(!x) return x; if(x>0){ return helper(x); } else{ int tm

2017-08-29 13:49:25 334

原创 leveldb-expand接口设计

leveldb-expand接口设计接口设计前缀匹配:virtual Status GetPrefix( const Slice& prefix, std::map<std::string, std::string>&entry_list ); 接口名:GetPrefix 接口功能:根据prefix指定的前缀,获取匹配该前缀的所有k-

2017-08-28 18:56:59 380

原创 c++学习-std::list

这个东西到不难,有一些接口需要熟悉,暂时记录下。代码#include <list>#include <iostream>int main(){ std::list<int> mylist; typedef std::list<int>::iterator iter; iter it1; iter it2; for( int i = 1; i <= 3; ++i

2017-08-25 18:16:43 501

原创 jobdu-1447-最短路

问题题目:[jobbu-1447]思路DIJKSTRA( G, w, s ){ 1.INITIALIZE-SINGLE-SOURCE(G,s) 2.S = EMPTY 3.Q = V[G]; 4.while Q!=EMPTY 4.1 do u = EXTRACT-MIN(Q); 4.2 S = S U {u}; 4.3

2017-08-22 21:08:38 319

原创 poj-2046-循环子串问题

问题题目:[poj-2046]思路这个题目有个结论: 若s存在循环子串,当且仅当,len可以被len - prefix[len-1]整除。连接次数为len / len-prefix[len-1]. 充分性我不会证明,我就证明下必要性吧。 不放假设s = pattern * n; len = strlen(s); 显然prefix[ len - 1 ] = pattern*(n-1),这个是最

2017-08-19 21:56:18 652

原创 leetcode-125-Valid Palindrome

问题题目:[leetcode-125]思路先预处理下,然后利用库即可。代码class Solution {public: bool isPalindrome(string s) { std::string tmp; int sz = s.size(); for(int i = 0; i < sz; ++i){ if(

2017-08-19 19:55:40 296

原创 leetcode-28-Implement strStr()

问题题目:[leetcode-28]思路朴素的思路,主串回溯。代码class Solution {public: int strStr(string haystack, string needle) { string& txt = haystack; string& pat = needle; int n = txt.size();

2017-08-19 19:47:15 377

原创 素数对-腾讯2018校招

问题题目:[素数对-腾讯2018校招]思路素数筛法筛出来,判断即可。 这个题用素数筛法筛出来,判断的复杂度也比较低。我第一次用集合就慢。代码#include <iostream>#include <string.h>#define N 1024int flag[N]; // flag[i] = 0, iff i is prime numbervoid generate_prime_table(

2017-08-17 22:16:10 316

原创 linux多线程-懒人笔记(二)

这一目记录我对linux多线程的继续学习。条件变量学习这一块的学习围绕两个问题来,本质都是针对下面这个接口:int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);问题1cond为什么要结合wait一起用? 1.这么考虑,这个问题要说清楚。必须从为什么

2017-08-16 12:33:37 331

原创 疯狂队列-网易2018校招内推

问题题目:[疯狂队列]思路这种题目应该算是所谓的找规律题目,找到了之后,两边分别开始放。其实,规律背后应该是有数学证明的,但是这个暂时先省略。笔试的时候没时间,拿到了只能去试了。 这个题我觉得值得一说是,利用deque能稍微快点搞定。 对于最后一个元素位置的选择要判断。代码#include <iostream>#include <vector>#include <algorithm>#in

2017-08-15 21:09:00 576

原创 交错01串-网易2018校招内推

问题题目:[交错01串]思路这个题我做的时候,很自然的就想到dp的思路。也没什么方法论指导我,感觉和之前做的最长连续子串类似。用了类似的方法。代码#include <iostream>#include <vector>int main( void ){ std::string s; while( std::cin >> s ){ int sz = s.size()

2017-08-15 19:35:38 375

原创 linux系统编程-read()write()函数分析

本文记录我对read(),write()函数这两个常见调用的再次学习。参考了如下链接: [socket:阻塞与非阻塞模式下,read和write的返回值 ]read阻塞调用:#include <stdio.h>#include <stdlib.h>#include <sys/select.h>#include <sys/types.h>#include <sys/time.h>#inc

2017-08-14 15:06:57 635

原创 linux系统编程-5种I/O模型

本文记录我对linux5种I/O模型的学习。参考了如下的链接,作者的原文写的非常赞,建议直接看作者的原文。作者:陶邦仁 链接:http://www.jianshu.com/p/486b0965c296 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。概述1 . 网络I/O的本质是socket读取,socket在linux系统被抽象为流,IO可以理解为对流的操作2

2017-08-14 10:52:28 743

原创 leetcode-51-N-Queens II

问题题目:[leetcode-51]思路dfs注意剪枝。恢复状态。代码class Solution {public: int totalNQueens(int n) { vector<int> visited; int ans = 0; dfs( n, 0, visited, ans ); return ans; }

2017-08-13 21:31:54 365

原创 leetcode-N-Queens 搜索

问题题目:[leetcode-51]思路dfs搜索即可,注意剪枝的条件。 注意,此时的搜索要恢复状态。代码class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>> ret; if( n < 1 ) return ret;

2017-08-13 21:22:51 299

原创 剑指offer-机器人的运动范围

问题题目:[剑指offer-机器人的运动范围]思路dfs+剪枝的常见思路。 注意,这个题是常规题目,上一道题目不太常规是因为它回溯之后,要恢复visited的未被访问的状态!!! 其实,正常的题目是不需要的。代码class Solution {public: int movingCount(int threshold, int rows, int cols) {

2017-08-11 17:30:10 355

原创 剑指offer-矩阵中的路径

问题题目:[剑指offer-矩阵中的路径]思路dfs+剪枝,也就是所谓的backtracking.实现的时候有一个技巧就是,只有确实某个(i,j)出现在路径中,visited[i][j]才会被值true。 然后,失败返回后重置为false。因为不能影响这次枚举其他枚举点的状态。比如: b->c->e->c这个路径是正确的。但是如果你直接b->c->f这个路径就错误。但是,由于还是是从b开始的局面,

2017-08-11 16:03:13 319

原创 剑指offer-滑动窗口的最大值

问题题目:[剑指offer-滑动窗口的最大值]思路暴力枚举窗口。代码class Solution {public: vector<int> maxInWindows(const vector<int>& num, unsigned int size) { vector<int> ret; int sz = num.size(); if

2017-08-09 22:28:45 332

原创 剑指offer-数据流中的中位数

问题题目:[剑指offer-数据流中的中位数]思路这个题目的意思是,数据流中一直有数据在插入,怎么样实时返回中位数。这个题目还是比较有实际意义,因为像在线系统一般都是实时插入数据。 这个题目是借助辅助数据结构,堆去完成。 对于一个数据,借助两个堆来进行排序,并且两者的元素之差始终不超过1个。 这个题目还是比较有技巧的! bug也改了我好长时间,就是要小心max_heap上来为空的情形,因此此

2017-08-09 22:13:26 318

原创 深入理解linux内核(第三版)-读书笔记

本文记录我对《深入理解linux内核》第三版的杂谈读书笔记,所记录的大部分为杂谈记录,系统的知识我会单独总结。第一章 绪论操作系统基本概念进程 程序运行时的一个实例。地址空间 允许进程引用的内存地址集合。系统调用 即对内核提出的请求,硬件就会把cpu从用户态切换到内核态。然后开始一个内核的执行过程。执行完毕之后,内核过程将迫使硬件返回到用户态。继续执行下一条指令。文件描述符(这一部

2017-08-09 20:17:15 634

原创 线程池实现

linux-c 线程池实现

2017-08-09 17:35:26 308

原创 操作系统-内存管理机制

本文总结了我对内存管理机制的学习,先从通用的操作系统课本的内存管理机制学习,然后深入到Linux操作系统,对于内存管理机制的实现。通用操作系统内存管理机制这一目我主要参考的是汤小丹老师《计算机操作系统》当中的内容,在此先说明。概述课本上并非直接讲内存管理,而是即cpu管理讲完之后,开始的存储器管理。毕竟它是操作系统需要负责进行管理的,当然这里面的重中之重当然是对于内存的管理。内存管理当中最重要的

2017-08-09 14:53:19 2732

原创 剑指offer-二叉搜索树的第k个结点

问题题目:[剑指offer-二叉搜索树的第k个结点]思路对于BST而言,最常见的遍历就是中序。因为可以递增序列,此时拿到第k个就可以了。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),

2017-08-08 20:41:35 286

原创 基本概念-同步、异步、阻塞、非阻塞

早上复习了下这几个概念,做一个简单的总结。 主要参考了这篇链接:[聊聊同步、异步、阻塞与非阻塞](ps:这篇写的真心赞啊!大家可直接看这篇)概述 同步异步主要是从消息通知的机制角度来说的,而阻塞与非阻塞关注的则是等待消息通知时的状态。 也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者。 简言之: 同步:消息处理着主

2017-08-08 11:59:16 331

原创 剑指offer-序列化二叉树

问题题目:[剑指offer-序列化二叉树]思路先说一下,下面的代码没有过,但是思路是对的。 我要求序列必须给出完全二叉树的形式,这样我才能计算正确的下表。但是题目序列化的时候,不是这么给的。我参考了一些网上做法,大家对序列化这个东西都是有自己的定义。本质就是根据完全二叉树序列进行构建,然后广度优先遍历。代码/*struct TreeNode { int val; struct T

2017-08-08 11:42:51 272

原创 c++学习-static_cast、dynamic_cast、const_cast和reinterpret_cast总结

简单围绕几种转换机制说一下。 参考如下链接:[static_cast、dynamic_cast、const_cast和reinterpret_cast总结]static_cast static_cast的转换格式:static_cast (expression).将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。 其实从

2017-08-07 15:58:52 276

原创 c++学习-c11中函数新特性

functor// functorstruct CmpPair{ bool operator()( pair<int,int>& lhs, pair<int,int>& rhs ){ return rhs.second < lhs.second; }};class Solution {public: vector<int> topKFrequent

2017-08-07 15:03:15 987

原创 剑指offer-把二叉树打印成多行

问题题目:[剑指offer-把二叉树打印成多行]思路保存每一层最后一个节点。 访问到它时进行更新操作。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ

2017-08-03 21:49:44 274

原创 c++学习-initializer_list

本文参考了[std::initializer_list]当中的内容,做一个简单的读书笔记。基本概念template<class T> class initializer_list; // 初始化列表类型从这个定义我们看出,initializer_list是一个模板类。具体来说这个类的作用就是根据c++语言当中的初始化列表声明,构造一个初始化列表对象。这样就可以将这个将这个初始列表的声明保存下来。#i

2017-08-02 14:55:15 662

原创 剑指offer-按之字形顺序打印二叉树

问题题目:[剑指offer-按之字形顺序打印二叉树]思路这个题的本质是返回每一层的节点,关键是增加每一层的最右侧节点作为标记。如果指针到达这个节点,那么证明此时队列里面的都是下一层的节点。关键是为什么不会有下下层的节点,因为现在访问到last,最多生成下一层的节点,不会有下下层。所以,此时队列中最后一个节点就是下一层的last.代码/*struct TreeNode { int val;

2017-08-01 21:06:04 282

原创 剑指offer-二叉树的下一个节点

问题题目:[剑指offer-二叉树的下一个节点]思路先说思路,由于求的是中序遍历二叉树的下一个节点。所以,分清楚集中情形即可。 1. 如果右子树存在,一定是右子树的最左下节点。 2. 如果右子树不存在,那就可能是它的爷爷节点,这时也需要一个判断就是,如果父节点是爷爷节点的左子树,此时,第一个爷爷节点就是中序遍历的下一个节点,注意可能不存在,比如父亲一直都不是爷爷的左孩子。代码/*struct

2017-08-01 20:21:29 304

原创 剑指offer-对称的二叉树

问题题目:[剑指offer-对称的二叉树]思路这个题关键是要能想到去把左右两枝分开。 对于一个树来说是否对称,这个问题转化为它的左子树,和它的右子树是否对称。分开成两棵树之后,剩下的就好判断了。对于p和q而言,判断跟节点是否对称,左子树是否对称,右子树是否对称。本质还是一个先根遍历。 但是要注意,由于是对称的,所以参数传递也是对称的,p的左子树和q的右子树。代码/*struct TreeNod

2017-08-01 20:14:13 278

原创 c++学习-左值右值和std::move初探

本文记录我对左右值的学习,以及std::move语义的学习。基本概念何为左值,何为右值? 区分左值右值的真正说法是:能否用“取地址&”运算符获得对象的内存地址。也即左值其实关联了一块具体内存,但是右值没有。那么,右值又存在哪呢? 对于临时对象,它可以存储于寄存器中,所以是没办法用“取地址&”运算符; 对于常量,它可能被编码到机器指令的“立即数”中,所以是没办法用“取地址&”运算符;

2017-08-01 16:02:12 918

原创 c++学习-智能指针学习

本文记录我对智能指针的学习,主要分为库学习和自己对于智能指针实现部分的学习。 主演参考链接如下: [从auto_ptr说起] [C++ 11 创建和使用 unique_ptr] [shared_ptr线程安全性分析] [为什么多线程读写shared_ptr要加锁?] [C++设计模式——代理模式] [解引用、判空以及比较] [cplusplus-shared_ptr]概述什么是智能

2017-08-01 11:59:05 511

原创 c++学习-RAII初识

本文主要记载今天早上读到的两篇blog的一些读书笔记。参考链接如下: [C++中的RAII机制] [RAII惯用法:C++资源管理的利器]基本概念1.什么是RAII(Resource Acquisition Is Initialization)? 中文可将其翻译为“资源获取就是初始化”。当然,这句话肯定并没有揭示出背后本质的思路。 Bjarne这样写道:使用局部对象管理资源的技术通常称

2017-08-01 11:29:36 421

空空如也

空空如也

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

TA关注的人

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