自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hh1562535601的专栏

学习笔记、心得感想,记录自己的成长历程吧。

  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

转载 两道有趣的fork题

http://wenku.baidu.com/link?url=vP--ONvZRBvscgRIe7sn08HqizYzNzIjOthFbATlgruCmL1EX3VneG1Q7w37DvWoH6QTMYCvMewGJnjimTLffQ7XSIOsS6w73K7Bh46isG3

2016-09-01 16:03:59 366

原创 C++智能指针

智能指针

2016-04-04 18:00:37 404

原创 C++删除不完全类型数组

看智能指针的时候遇到一组函数蛮有意思的,即checked_delete(T* x)和checked_array_delete(T* x),这两个函数的作用是安全删除参数所指向的变量或数组。template inline void checked_delete(T* x){ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];

2016-03-17 00:18:48 705 1

原创 Effective C++笔记(六)

条款41:区分继承和模板"当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类。"条款42:明智地使用私有继承”当私有继承是你可以使用的最合适的实现方法时,就要大胆地使用它。同时,广泛意义上来说,分层是应该优先采用的技术,所以只要有可能,就要尽量使用它。“条款43:明智地使用多继承不正确

2015-11-04 09:45:42 390

原创 Effective C++(五)

条款33:

2015-11-03 17:40:39 332

原创 LeetCode——Search a 2D Matrix II

这题《剑指offer》上有,可以从左下角开始搜索,根据当前值与目标值的关系决定向右走还是向上走,用二分搜索更快。知道了这个思路就很容易AC了,但如何优化效率是个问题。我很奇怪这题居然是用Java的普遍运行需时更短,几十毫秒甚至十几毫秒,用C的却普遍在100ms左右,C++就更慢了~

2015-11-02 20:48:44 294

原创 LeetCode——Peeking Iterator

先自己写了个简单粗糙的,然后又看了提示中给的参考答案,模仿着写了一个// Below is the interface for Iterator, which is already defined for you.// **DO NOT** modify the interface for Iterator.class Iterator { struct Data; Data*

2015-11-02 20:30:54 382

原创 Effective C++(四)

条款25:避免对指针和数字类型重载因为0既可以是一个整型值,也可以是空指针。条款26:当心潜在的二义性二义性当然要避免,本条款强调的是“潜在”二字。很多时候,二义性会隐藏得很深,所以要尽可能地小心。条款27:如果不想使用隐式生成的函数就要显示地禁止它有些函数,当你没有声明定义它们时,编译器会自动为你生成,但它们是基于默认语义的,所以如果这不是你想要的,就需要显示

2015-11-02 19:48:35 280

原创 Effective C++笔记(三)

条款18:争取使类的接口完整并且最小接口要完整毫无疑问,最小也好理解,本来一个接口可以完成的事,非要写一百个接口,不是浪费人力嘛~其实作者强调的是,接口小,用户容易理解,不容易混淆,且容易维护。

2015-11-01 00:00:10 267

原创 LeetCode——H-Index II

用得二分查找,但似乎还有更好的方法,没来得及琢磨。class Solution {public: int hIndex(vector& citations) { int n = citations.size(), result = 0;; int low = 0, high = n-1, mid = low/2+high/2;

2015-10-30 16:53:31 286

原创 LeetCode——H-Index

这题简单点就先对数据进行基于比较的排序,时间复杂度O(nlogn),空间复杂度O(1);如果想把时间复杂度将为O(n),就使用基数排序,但空间复杂度上升为O(n)。class Solution { public: int hIndex(vector &citations) { int n = citations.size(); int *num = ne

2015-10-30 14:26:15 394

原创 LeetCode——Minimum Path Sum

这题和Unique Path条件一样,每次只能向右走一格或向下走一格,因此思路也差不多,只不过本题不是把这两格的值加起来,而是选取较小的值,因为要求最小值。class Solution {public: int minPathSum(vector>& grid) { int row = grid.size(), col = grid[0].size(

2015-10-29 23:59:17 279

原创 Effective C++笔记(二)

条款9:避免隐藏标准形式的new在类里声明了一个带多个参数的operator new函数后,就无法以标准形式调用operator new,因为全局的operator new函数被成员函数遮蔽了。条款10:如果写了operator new就要同时operator delete这两个函数是成对使用的,它们之间要遵循一些共同的约定,如果重写了其中一个而不重写另一个,它们之间就难以保证

2015-10-29 17:20:07 308

原创 LeetCode——Unique Path

想知道从某个格子出发到达目标格子有多少种不同的路径,就需要知道其右边的格子和下边的格子到达目标格子有多少种不同的路径,然后相加即得总的路径数。但要知道其右边的格子和下边的格子到达目标格子有多少种不同的路径,又要如此递归下去。为了简化计算,采用自底向上的思想,想到达右下角的格子,就要先到达这个格子的上边或左边,知道了这两个格子到达目标格子的不同路径数,其和就为同时与这两个格子相邻的那个格子到达目标格

2015-10-29 00:20:00 374

原创 Effective C++笔记(一)

条款1:尽量使用const和inline而不要使用#defineC++从C继承来古老的预处理器,遗留了不少问题。预处理器更像是文本处理器,并不具有太多智能,编译器无法对预处理器的功能作过多检查和保障。过于依赖预处理器,就难以享受到编译器的强大智能。因此应该尽量使用编译器提供的机制,少用预处理器的功能。条款2:尽量使用而不是简单来说,就是比更新更高级,考虑的更多更全面,例如类

2015-10-28 17:44:29 334

原创 LeetCode——Missing Number

这道题的思路是将其转化为Single Number那道题,将原数组与0...n这n+1个数合并成一个新数组,是不是就是Single Number这道题了?当然,本题要求常数空间复杂度,不必合成一个新数组,迭代计算就可以了。class Solution {public: int missingNumber(vector& nums) { int

2015-10-28 14:53:38 306

原创 LeetCode——Product of Array Except Self

本题要求是不使用额外空间,但保存输出结果的空间是必须要有的,此空间不计入空间复杂度,因而我们可以利用这部分空间存储中间结果。先看代码:class Solution {public: vector productExceptSelf(vector& nums) { vector output; int curren

2015-10-28 10:39:00 282

原创 LeetCode——Single Number II

这道题有两种思路吧,一种是针对这道题的特定思路:class Solution {public: int singleNumber(int A[], int n) { int one=0, two=0, three=0; for(int i=0; i<n; i++){ two |= one&A[i]; on

2015-10-28 00:02:48 431

原创 LeetCode——Single Number III

Single Number III和Single Number都可以用异或做,当然这题的难度要更大些。基本思想是,数组中仅有两个数只出现一次,如果我们能把这两个数分到两组,使每组除了一个数字只出现一次,其余数字都出现两次,则题目转换为Single Number。为了达到这个目的,需要用一个数来区分这两个数字。我们可以这样做:先把数组中所有的数异或,根据异或的性质,(n ^ a)  ^ a ==

2015-10-27 17:12:25 333

原创 hlist_head/hlist_node

这是Linux内核代码中常用的哈希链表的结构体定义。第一个结构体存放链表头指针,first指针指向一个由hlist_node节点组成的链表,声明一个struct hlist_head数组,每个元素都指向一条链表,就形成了一个哈希表中的很多哈希桶,类似于图的邻接表。struct hlist_node结构体中有前驱指针和后继指针,但不同于其他的数据结构,前驱指针并不是指向前一个节点,而是一个二级指

2015-10-26 22:38:48 722

转载 struct net

1 /* 2 * Operations on the network namespace 3 */ 4 #ifndef __NET_NET_NAMESPACE_H 5 #define __NET_NET_NAMESPACE_H 6 7 #include asm/atomic.h> 8 #include linux/workqueue.h> 9 #include

2015-09-17 15:10:01 923

原创 可变函数参数

arg_list va_start() va_arg() va_end()

2015-09-15 17:26:25 268

原创 博文转载

http://www.cnblogs.com/felixfang/p/3814463.htmlhttp://blog.csdn.net/hcbbt/article/details/10454947http://www.cnblogs.com/zzzdevil/p/3651168.html

2015-07-31 15:34:53 1471

原创 LeetCode——Linked List Cycle II

若同时从一个环的某个点出发,fast指针每次走两步,slow指针每次走一步,则可证明slow指针走回起点时,fast指针也恰好到达起点。两种思路:一、fast指针每次比slow指针多走一步,fast指针想与slow指针同时到达某点,必须超过slow指针一圈,每次多走一步,假设环的节点数为N,则多走一圈需要走N次,此时slow指针恰好走完一圈指向出发点,fast指针亦然;二、fast指针的速度是sl

2015-07-22 16:54:45 452

原创 LeetCode——Word Break

class Solution {public: bool wordBreak(string s, unordered_set& wordDict) { int len = s.size(); if(len == 0) return false; set tmp; for(int i = 0; i < len; ++i) {

2015-07-09 15:11:34 293

原创 LeetCode——Count Complete Tree Nodes

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */clas

2015-07-09 15:07:44 412

原创 堆排序

堆是一种完全二叉树,分为小根堆和大根堆。大根堆中任意节点的值都不大于其父节点的值。有些类似于二叉搜索树,都是要求父节点和子节点的值满足某种关系。        堆排序的基本思想是,先用所给数据建立大根堆,堆顶元素即为最大值,将其与最后一个元素交换,此时最后一个元素为最大值;再对最大值之前的元素进行调整,使其恢复为大根堆。再如此将次大值取出排列在最大值之前,循环往复,直到所有元素都排好序。 

2015-07-08 20:25:48 371

原创 Bitwise AND of Numbers Range——LeetCode

class Solution {public:/*mask的32位全为1,mask*/      int rangeBitwiseAnd(int m, int n) {                  int i = 0, mask= ~0;                while ((m & mask        {            ++i

2015-06-29 23:50:02 306

原创 Best Time to Buy and Sell Stock——LeetCode

原题地址:https://leetcode.com/problems/best-time-to-buy-and-sell-stock/         内容都在代码和注释里,就不罗嗦了。class Solution {public: int maxProfit(vector& prices) { /* 这类题目已经遇到过几次,都是要在一维数组中

2015-06-24 21:23:26 432

原创 Search in Rotated Sorted Array——LeetCode

这道题在LeetCode上是Hard类的,首先声明,代码是别人的,我只是解释一下。class Solution {public:/*如果数组是有序的,那么大家都会想到并使用二分搜索,但本题设置了这样一个障碍:数组是rotate过的。这样,原先有序的数组就变成了局部有序:(假设)分为两个有序的子数组,并且左边子数组中的元素都大于右边子数组中的元素。这时,采用二分搜索,需要判断数组nu

2015-06-24 21:01:08 336

原创 boost并发编程(三)——共享互斥量

前一篇介绍的条件变量可以进行进程间通信,用来实现生产者/消费者模型。今天介绍的共享互斥量用来实现缓冲区读写模型,与生产者/消费者模型不同的地方是,消费者消费产品后,被消费的产品就不存在了,所以消费者线程也要互斥运行;而缓冲区读取线程读取数据后不删除数据,多个线程可以并行读取。这时使用条件变量也不合适了,就要使用共享互斥变量了。        共享互斥量,顾名思义,既共享,也互斥,读线程之间共享

2015-06-17 23:40:17 1436

原创 boost并发编程(一)——互斥锁

这个系列其实是《Boost程序库完全开发指南》的读书笔记。按照书中的方法代码没跑起来,所以转到Ubuntu下学习了。boost库在Ubuntu下的安装,直接用apt-get install命令安装就可以了,需要安装libboost-dev libboost-system libboost-thread        我们直接上代码,通过讲解代码来学习。一方面,更详细的内容请参看原书,在此不作重

2015-06-16 23:23:30 2985

原创 Unique Binary Search Trees-LeetCode

采用动态规划

2015-06-14 16:01:40 415

原创 boost并发编程(二)——条件变量

这篇文章的内容其实是对《Boost程序库完全开发指南》里的相关内容进行讲解。

2015-06-12 19:06:21 2090 1

原创 gas station-Leetcode

这题还是比较有意思的,会用到一些结论和性质,代码并不复杂。自己懒得写证明了,转载了别人的文章。        主要利用的性质就是:1.如果∑gas[i] >= ∑cost[i],则一定存在解,且题目保证解唯一;2.若在某个区间上,∑gas[i]          第一个性质的大概证明(并非严格的数学证明)请看转载的这篇文章:http://blog.csdn.net/hh794362661/

2015-06-12 16:15:53 353

原创 Excel Sheet Column Number -LeetCode

这题是真的简单了,分分钟的事,所以本文当然不是讲这题的算法思路啥的。我想学python,所以这题是讲怎么用python实现的。实现的方法有很多,python应该也可以和C/C++一样,通过数组下标来操作字符数组,这样就没什么好说的了,所以我们这题用python独有的方法来做。class Solution: # @param {string} s # @return {int

2015-06-11 11:31:47 427

原创 Factorial Trailing Zeroes-Leetcode

本题仍然是考察思路,属于Easy级别,有了思路后只需几行代码即可实现:class Solution {public: /* 要想若干数字之乘积末尾出现0,则这些数字的因子中必须包含末尾为2和5的数字,如 10*2 = 20 = 2*5*2, 6*5 = 30 = 2*3*5 本题是求某个数的阶乘末尾之0的数量,某个数的阶乘就是小于等于这个数且大于1的所有整数之乘积,因

2015-06-10 15:41:23 308

原创 Jump Game-Leetcode

这题仍然是考察算法和思路的,有思路了实现并不难。class Solution {public: /* 若∃ index = nums.size()-1,意味着只要能到达第index个元素,就可以通过这个元素到达第 nums.size()-1个元素,此时,我们只需考虑能否从前面的元素到达第index个元素。据此逆序迭代,找到最小的出发点,判断下标是否为0即可。

2015-06-09 11:28:51 384

原创 排列组合与子集

Leetcode上有几道题比较类似,Permutation、Combination和Subsets等。说它们相似,是因为思路类似。要求出某个序列的排列组合和子集,初看起来,要对序列中的每个元素排列、取舍,初看起来,似乎要写一个循环层数正比于元素个数的大循环,而语言并没有提供这种功能。这时就要转变思路,先求部分解或子问题的解,再迭代求出原问题的解。

2015-06-05 11:27:38 587

原创 Remove Element -LeetCode

Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn't matter what you leave beyond the new length. 这道

2015-06-05 10:54:24 334

计算几何--算法与应用(第2版)(中文版).pdf

最近一直在找算法方面的书,这本书还可以,有需要的童鞋看看吧

2011-05-23

数据结构算法Visual C 6.0程序集

关于程序设计算法方面的书,学习数据结构和算法的童鞋们可以看看

2011-05-23

空空如也

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

TA关注的人

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