摘要: 题目链接:https://leetcode.com/problems/container-with-most-water/ 分析:两指针+短板原理 用两个指针分别指向最左边和最右边,根据短板原理,能够存储最大容量的水其实是由最短的那块短板来决定的,因此当height[l] < height[r]时, 阅读全文
posted @ 2016-05-14 15:37 Shirley_ICT 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 链接:https://leetcode.com/problems/find-the-duplicate-number/ 两种解法: 1)利用二分+鸽巢原理 其实就是使用二分搜索来枚举重复数字的范围;根据鸽巢原理,如果数组中<=1/2n的数字超过了1/2n,则说明1~1/2n中有重复的数字,因此我们可 阅读全文
posted @ 2016-05-12 22:06 Shirley_ICT 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 1.以对象管理资源 把资源放进对象内,可以依赖C++的析构函数自动调用机制,确保资源被释放 2.在资源管理类中消息copying行为 3.在资源管理类中提供对原始资源的访问 4.成对使用new和delete时要采取相同形式 5.以独立语句将newed对象置入只能指针 如果不这样做,一旦异常被抛出,有 阅读全文
posted @ 2016-05-12 17:40 Shirley_ICT 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 1.如果不想对象有默认的拷贝构造函数和拷贝赋值函数,可以在对象中声明这两个函数而不去实现他们 更好的做法: class Uncopyable { protected: Uncopyable(){} ~Uncopyable(){} private: Uncopyable(const Uncopyabl 阅读全文
posted @ 2016-05-12 13:34 Shirley_ICT 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://leetcode.com/problems/majority-element/ 这道题目要求找出超过数组个数一半的元素 分析:和编程之美上的寻找发帖"水王"是同一个题目,如果每次都删除两个不同的元素,那么在剩下的元素中,原来超过数组个数一半的元素,现在仍然会超过数组个数的一 阅读全文
posted @ 2016-05-10 12:15 Shirley_ICT 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://leetcode.com/problems/missing-number/ 解法1)根据不缺失情况下的数字和-缺失情况下的数字和就是缺失的数字,代码如下: 解法2)使用异或来解决,首先1~n先进行一次异或,然后对数组中的数字再异或一次,由于a^a得到的是0,因此有一个数字在 阅读全文
posted @ 2016-05-09 20:09 Shirley_ICT 阅读(746) 评论(0) 推荐(0) 编辑
摘要: const常量vs 宏定义 1.尽量使用常量const替换#define 2.为了将常量的作用域限制在类内,可以定义类的专属常量,而#define不能用来定义类的专属常量,无法提供任何封装性 3.enum hack技术 4.对应形似函数的宏,最好改用inline函数替换#define 赋值vs初始化 阅读全文
posted @ 2016-04-21 14:15 Shirley_ICT 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 1.C++中,当数组作为函数的参数时,会退化成同类型的指针,sizeof的时候获取的是该类型指针所占的空间 2.C++中,为了节省内存空间,会把常量字符串统一放到一个单独的内存区域,当给几个指针赋值相同的常量字符串时,实际上指向的是相同的内存地址 3.在C++中,set, map, multiset 阅读全文
posted @ 2016-02-16 10:05 Shirley_ICT 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给你红,白,蓝三种颜色的数组,要求按照红、白、蓝的顺序排序,leetcode链接:https://leetcode.com/problems/sort-colors/ 思路1: 直接给整个数组排序,时间复杂度O(nlogn) 思路2: 计数排序方法,使用一个类似hash的数组纪录每种颜色 阅读全文
posted @ 2016-01-27 23:13 Shirley_ICT 阅读(993) 评论(0) 推荐(0) 编辑
摘要: 题目要求:对归并排序进行修改,要求合并过程的空间复杂度为O(1) 解题思路: 假设a[beg, mid]和b[mid+1,end]是两段有序的子段,分别记做A和B,现要对其进行合并 1) 首先对A进行搜索,找到比B[0]大的第一个位置,记录为i,即A[0~i-1] < B[0],而A[i] > B[ 阅读全文
posted @ 2016-01-25 22:23 Shirley_ICT 阅读(1316) 评论(0) 推荐(0) 编辑