自定义博客皮肤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的博客

潮平两岸阔,风正一帆悬

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

原创 剑指offer-删除链表中重复节点

问题题目:[剑指offer-删除链表中重复节点]思路我的逻辑就是对于每个节点,枚举后面的节点,找到重复节点的下一个节点。 当然,既然有序的,也可以哈希表。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};

2017-07-31 22:07:07 302

原创 c++学习-类型转换运算符

本文记录我对c++四种转换运算符的学习。参考的链接如下:[C++标准转换运算符const_cast]前言既然c语言提供隐式和显示的两种类型转换方式,为什么c++又要提供这四种类型转换运算符呢? C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。很显然,c语言的类型转换没有覆盖的多态的特性,所以c++再次提出统一的四种类型转换运算符,要覆盖

2017-07-31 11:39:13 344

原创 设计模式-单例模式

本文记录我对单例模式的学习。参考了如下链接:[C++设计模式——单例模式]基本概念以及一种基本版本的实现什么是单例模式? 何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的

2017-07-28 18:16:38 411

原创 剑指offer-构建乘积数组

问题题目:[剑指offer-构建乘积数组]思路这个题目还是有一点难度的,很难考虑到。这个方法我也是参考了别人的方法。 对于,B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1] 可以分成两部分:A[0]A[1]…A[i-1] 以及 A[i+1]A[i+2]…A[n-1]这两部分,而这两部分分别是连续的。 所以, 记 P[i] = A[0]A[1]…A[i-1] = P[i-

2017-07-27 21:06:50 253

原创 剑指offer-链表中环的入口结点

问题题目:[剑指offer-链表中环的入口结点]思路第一次相遇的地方,重置p,正常走,第二次相遇的地方就是环的入口。 小心没有环的情形。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class

2017-07-27 20:25:32 262

原创 c++学习-虚函数学习

本文记录我在看《深入探索c++对象模型》时虚函数的学习心得,当然也参考了互联网上的一些资料。先列出参考。 [虚函数浅析] [关于虚函数的那些事]基本知识1 . 虚函数的作用说白了就是:当调用一个虚函数时,被执行的代码必须和调用函数的对象的动态类型相一致。 2 . 编译器需要做的就是如何高效的实现提供这种特性。不同编译器实现细节也不相同。大多数编译器通过 vtbl(virtual table)和

2017-07-27 11:44:52 414

原创 剑指offer-数组中重复的数字

问题题目:[剑指offer-数组中重复的数字]思路这个题我觉得其实它也没说清楚,看了注释才明白。 要得到所有重复的数字。 那我就判断一下,第一次重复数字出现的时候得到,通过first标记来判断是不是第一次。代码class Solution {public: // Parameters: // numbers: an array of integers

2017-07-26 20:45:17 273

原创 剑指offer-字符串转化为数字

问题思路这个题,思路倒是不难。考虑的情形比较多啊。 我遇见的主要bug: 1. 只有1个符号的情形 2. 由于负数的得到是正数进行转化,所以,别忘了最后的转化 3. 考虑-2147483648,先提取正数部分,2147483648,已经溢出了。所以,需要long long 存储。 4. 还有就是,字符串表示的数字有可能已经溢出了比如,+4212344212这样的数字。返回0.代码class

2017-07-26 20:37:24 360

原创 整型溢出的问题

参考[C语言的整型溢出问题],自己稍作总结。问题先看一个简单的问题,求两个数的和。你可能会有如下的实现:#include <iostream>int add( int a, int b ){ return a+b;}int main( void ){ int a,b; while( std::cin >> a >> b ){ int sum = add(

2017-07-26 18:20:52 687

原创 memcpy实现

本文引出memcpy的问题,并提供一个实现方式。 参考了[【C/C++】实现memcpy函数]问题首先来看memcpy的定义:void *memcpy(void *dest, const void *src, size_t n);//If copying takes place between objects that overlap, the behavior is undefined.对于内

2017-07-26 16:04:38 1348

原创 剑指offer-不用加减乘除做除法

问题题目:[剑指offer-不用加减乘除做除法]思路用位运算。 抑或操作可以实现无进位的加法。然后&操作左移,计算进位。 代码class Solution {public: int Add(int num1, int num2) { int carry = (num1 & num2) << 1;// 计算进位 int tmp = num1 ^ nu

2017-07-25 19:58:37 1623

原创 剑指offer-孩子们的游戏(圆圈中最后剩下的数)

问题题目:[剑指offer-孩子们的游戏]思路约瑟夫环的问题。 具体做法,考虑到删除,最好的办法是用循环链表。 但是,也没关系,用STL list即可。 小心迭代器失效的问题!!!其实,链表只是当前元素可能失效,但是迭代器可能到无效位置。代码class Solution {public: int LastRemaining_Solution(int n, int m) {

2017-07-25 19:55:22 294

原创 剑指offer-求1+2+3+...+n

问题题目:[剑指offer-求1+2+3+…+n]思路参考[浅谈《剑指offer》原题:求1+2+……+n]. 这个题目还是很有意思的,注意的是,如果需要写静态成员,起初我一直过不去,既然编译器你改不了,那证明还是你代码的问题。倘若是编译器问题,你也应该想思路搞定他。代码class Foo{public: Foo(){ ++cur; sum += cur; } static in

2017-07-24 20:54:07 264

原创 剑指offer-扑克牌顺子

问题题目:[剑指offer-扑克牌顺子]思路参考了[《剑指offer》-扑克牌顺子]主要思路就是求出0的个数,再求出所有数字之间两两的gap = arr[cur] - arr[pre] - 1. 如果0的个数小于gap的个数是不行的。还有,如果除了0之外任意两个数字相等,肯定无法形成顺子。代码class Solution {public: bool IsContinuous( vector

2017-07-24 20:22:18 335

原创 剑指offer-左旋字符串

问题题目:[剑指offer-左旋字符串]思路矩阵求逆的思路。代码class Solution {public: string LeftRotateString(string str, int n) { std::reverse( str.begin(), str.begin() + n ); std::reverse( str.begin() + n, st

2017-07-24 18:44:29 396

原创 leetcode-39-Combination Sum

问题题目:[leetcode-39]思路这个题目也是dfs,每一层扫描全部的数字。 但是,这个题目有一个限制它是组合,所以每一个元素必须是升序。 需要判断下。代码class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<

2017-07-24 18:27:55 283

原创 leetcode-77-Combinations

问题题目:[leetcode-77]思路dfs搞定。 由于限定了层数,所以到k层的时候返回即可。 写代码的时候有一个bug,由于事先分配了空间,所有不能用pop_back().对于全排列如果也指定k位,那么也需要用dfs的办法,之前的办法可能就不可行了。代码class Solution {public: vector<vector<int>> combine(int n, int k)

2017-07-24 18:19:28 446

原创 c++学习-reference to non-static member function must be called

问题直接上问题,我今天再刷题的时候,碰到了下面的编译错误。 reference to non-static member function must be called先来看错误代码:class Solution {public: string ReverseSentence(string str) { typedef string::const_iterator co

2017-07-21 15:45:47 11554

原创 剑指offer-翻转单词顺序列

问题题目:[剑指offer-翻转单词顺序列]思路这个题我见的多了,STL算法搞定。 两个问题: 1. 成员函数写成static,否则find_if的第三个参数无法绑定 2. 边界数据,只有空格的情形。代码class Solution {public: string ReverseSentence(string str) { typedef string::const_i

2017-07-21 15:30:55 270

原创 剑指offer-数组中只出现一次的数字

问题题目:[剑指offer-数组中只出现一次的数字]思路这个题朴素的思路就不说了,哈希即可。 说下位运算的思路,其实我不会做,参照了别人的做法。 大体思路如下: 1. 可以采用^操作,可以消除一样的数字。但是,这回导致一个问题,最后的结果是num1和num2亦或的结果。 2. 这是本题的精髓,考虑到如果有两个数字不能分开,但是如果一个数组中其余数字两两相同,只有一个数组不同,可以用上述的办法

2017-07-21 15:11:56 254

原创 剑指offer-平衡二叉树

问题题目:[剑指offer-平衡二叉树]思路递归的思路。 首先,根据平衡二叉树定义,空树肯定是平衡二叉树。所以,可以先判空。 然后,递归判断左枝和右枝。 如果都是,再判断当前节点有没有爆掉。代码class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if( !pRoot ) return

2017-07-21 14:25:59 221

原创 剑指offer-二叉树的深度

问题题目:[剑指offer-二叉树的深度]思路递归解决。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/cla

2017-07-21 14:23:17 231

原创 剑指offer-数组中的逆序对

问题题目:[剑指offer-数组中的逆序对]思路我的思路就是暴力,显然过不去。 可以参考[求数组中逆序对的个数]这个题思路的关键就是,如果给你一个序列,我要是把所有的逆序对都找出来,并且找出来的同时也把它交换了,那么最后的序列是没有逆序的。因为,如果有逆序,我就把它换回来就好了,最后肯定是一个有序序列。所以,就是一个找逆序对,交换排序。思路是用归并,用归并主要是便于计数,其实我觉得对于交换排序,因

2017-07-20 19:21:06 205

原创 剑指offer-数字在排序数组中出现的次数

问题题目:[剑指offer-数字在排序数组中出现的次数]思路朴素的思路不说了,扫一遍就行了。代码class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int sz = data.size(); if(!sz) return 0; int i = 0;

2017-07-20 17:46:03 228

原创 剑指offer-数字在排序数组中出现的次数

问题题目:[剑指offer-数字在排序数组中出现的次数]思路朴素的思路不说了,扫一遍就行了。代码class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int sz = data.size(); if(!sz) return 0; int i = 0;

2017-07-20 17:45:54 174

原创 linux网络-gethostbyname

代码#include <stdio.h>#include <stdlib.h>#include <netdb.h>#include <arpa/inet.h>int main( int argc, char* argv[] ){ struct hostent* host; if( argc < 2 ){ printf( "Usage : %s <hostname>

2017-07-19 20:47:13 306

原创 剑指offer-两个链表的第一个公共节点

问题题目:[剑指offer-两个链表的第一个公共节点]思路朴素的思路不说了。 这个题有个默认的条件是:他们的公共节点之后一直是公共的,Y型的。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/

2017-07-19 20:03:36 223

原创 剑指offer-第一个只出现一次的字符

问题题目:[剑指offer-第一个只出现一次的字符]思路哈希的思路。 但是要小心一点的是,看下面注释,如果要全部置0,那么对于第一个数字,它保存的位置就是0,此时应该是无效的。但是,这是一个有效的位置。代码class Solution {public: int FirstNotRepeatingChar(string str) { int sz = str.size();

2017-07-19 18:50:35 272

原创 剑指offer-丑数

问题题目:[剑指offer-丑数]思路参照[Ugly Number II] 主要是模仿素数筛法,发现丑数生成的规律,全部是由小的丑数×2,3,5.然后有一个merge k lists的问题。代码class Solution {public: int GetUglyNumber_Solution(int index) { vector<int> ret; r

2017-07-19 18:23:52 240

原创 leetcode264-Ugly Number II

问题题目:[leetcode-264]思路只想到了朴素的思路,果然TLE。 参考了这篇链接。[ugly number ii] 其实,它的思路也很明显。和素数筛法差不多,这个可以叫做丑数筛法吧。 具体思路是这样,因为任何一个丑数的素因子只能是2,3,5.所以,可以进一步知道,任何一个大的丑数,都是由小的丑数×2,3,5生成。所以,所有的丑数都是从1开始,然后乘以2,3,5生成。这个不是难点,难点

2017-07-19 18:09:15 356

原创 c++学习-类的前置声明与使用头文件区别

今天在看Leveldb源码的时候,发现作者使用了很多前置声明,这个语法之前关注的不是很多,今天稍微总结下。 主要参考了下面文章: [关于C++中的前置声明]什么时候用一般是用头文件来声明要使用的新类型,但是当两个头文件形成环的时候可以使用类的前置声明来破除环。我看leveldb源码的时候,作者大量使用前置声明,并不是因为这个原因,忘了在哪看到过,在此处使用前置声明的原因应该是:前置 引用声明

2017-07-18 12:10:53 1007

原创 剑指offer-整数中1出现的次数

问题题目:[剑指offer-整数中1出现的次数]思路先用个简单的方法搞定,主要小心11的情形。 题目要看仔细。代码class Solution {public: int NumberOf1Between1AndN_Solution(int n) { if(55==n) return 16; int ans = 0; for(int i

2017-07-17 20:33:38 210

原创 剑指offer-连续子数组的最大和

问题题目:[剑指offer-连续子数组的最大和]思路这个题做了好几次了,套路应该是DAG模型的最短路。我不是很确定,但是我觉得类似。具体来说,状态定义的时候:dp[i]表示以array[i]结尾的连续数组最大和,因为题目要求是连续,所以我觉得一定要以array[i]结尾。至于最大,最后把状态数组扫描一遍即可。代码class Solution {public: int FindGreates

2017-07-17 20:22:20 280

原创 剑指offer-最小的K个数

问题题目:[最小的k个数]思路top K问题,partition搞定即可。代码class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { int sz = input.size(); if( sz < k ) retu

2017-07-17 20:07:29 207

原创 leetcode-451-Sort Characters By Frequency

问题题目:[leetcode-451]思路统计排序累加代码class Solution {public: string frequencySort(string s) { map<char, int> counter; int sz = s.size(); for(int i = 0; i < sz; ++i){

2017-07-17 20:02:56 320

原创 2017年7月-学习笔记

本学习笔记主要记录了我对tcp/ip卷1这本书的学习心得,主要看的电子版的数目,本文中图片如无特别说明,均来自,[张防涛-简书]当中tcp/ip详解的文章。作者:张芳涛 链接:http://www.jianshu.com/p/d91dec1e066a 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。20170717早上我看了下,tcp/ip详解卷1的第一章。大概

2017-07-17 10:29:35 1471

原创 剑指offer-数组中出现次数超过一半的数字

问题题目:[数组中出现次数超过一半的数字]思路朴素的就不说了,这个打擂法倒是第一次见,反正我没有看见可以讲的很清楚的为什么这么做可以。 主要参考[数组中出现次数超过一半的数字 -java]说下我的理解吧,打擂法的基本操作如下: result = nums[0], 保存当前数字。count = 1, 按照如下的方式计数。 1. 当遍历到下一个数字时,如果这个数字跟之前保存的数字相同,则次数加1。

2017-07-14 18:08:53 241

原创 linux网络-点分十进制和网络字节序转换

基本概念#include <arpa/inet.h>in_addr_t inet_addr(const char *string);该函数的作用是将用点分十进制字符串格式表示的IP地址转换成32位大端序整型。成功时返回32位大端序整型数值,失败时返回 INADDR_NONE 。代码#include <stdio.h>#include <arpa/inet.h>int main( void ){

2017-07-14 15:36:51 1744

原创 linux时间-获取系统时间

基本概念获取系统时间主要用到如下的结构与函数:struct timeval{ long int tv_sec; // 秒数 long int tv_usec; // 微秒数}相应的获取当前系统时间的函数:#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz

2017-07-14 15:08:09 436

原创 bitmap学习

主要参考了以下两篇文章 [《编程珠玑》学习总结1—bitmap] [浅谈bitmap算法]基本概念什么是bitmap 我自己的理解是:首先是一种map,其次映射到bit位。关键还是它是一种映射,映射到的value由于是bit,比较节省空间。bitmap是一种映射,每一个bit位用来表示key所对应的value是否存在。优点和缺点是什么 优点:节省空间,并且,位运算比较快 缺点:不能处理

2017-07-14 12:30:26 451

空空如也

空空如也

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

TA关注的人

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