- 博客(21)
- 收藏
- 关注
原创 Java 异步同时写多个文件,写完之后通知子线程
思路: 是主线程和多个写文件线程之间同步,每写完一个文件计数加1,如果计数值等于当前写文件个数的时候,表示文件已经全部写完。此时通过条件变量通知在该条件变量等待的主线程。此时主线程被唤醒,可以在所有文件被写完的条件下做一些动作代码:package com.example.task.thread;import java.io.FileNo
2015-08-21 14:55:50
3828
原创 LeetCode:Reverse Linked List II 解法
反转链表的扩展,要求能理解本质,考虑边界情况class Solution{public: ListNode* reverseBetween(ListNode* head, int m, int n) { ListNode* result = NULL; ListNode* p = head;
2015-04-15 16:57:35
391
原创 LeetCode上的写一个二叉查找树的由小到大顺序的迭代器
LeetCode题目:Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.Calling next() will return the next smallest number in the BST.
2015-04-11 16:08:49
441
原创 动态规划算法应用于一个实际问题
题目:一个城市,公交车每隔1km停一次,公交车票价格随行驶里程1km到10km之间而各不相同,可以分段搭乘来降低到达目的地的费用 比如假设公交费用列表如下:Distance(km)12345678910Bus Fare122131404958697990101
2015-04-10 13:13:00
783
原创 某个对象构造的时候讲自己注册到一个单例的管理者
#include#includeusing namespace std;class Delegate;class Observer{public: static Observer* getInstance(); void addDelegates(Delegate* delegate) { cout m_D
2015-04-10 11:14:52
426
原创 利用OpenGL模板缓冲,从正方形中抠出一个圆形边框
#include#includevoid init(){ /* color buffer,stencil buffer清除色, 使能模板测试 */ glClearColor(1.0,0.0,0.0,1.0); glShadeModel(GL_FLAT); glClearStencil(0); glEnab
2015-04-07 15:47:47
883
原创 矩阵模板,右元函数重载<<操作符
1.矩阵元素类型,以及矩阵的宽高都声明为模板参数2.双元操作符一般都重载为友元函数 cout string friend bool operator > (const string& string1, const string& string2) template class MTVariable{public: union {
2015-04-07 13:58:44
394
原创 在Ubuntu上安装和链接GLES的库
1.安装GLES2.0的库sudo apt-get install libgles2-mesa-dev2.链接GLES2.0以及相关的库所需的链接选项-lGLESv2 -lEGL -lm -lX11 其中EGL是Opengl ES渲染API和本地窗口系统直接的接口X11 是Linux的窗口系统
2015-04-07 13:40:24
2504
1
原创 Linux下动态链接库的导出
如果要导出某个struct,class,function, 则把__attribute__((visibility("default"))) 放置在你希望导出的struct,class,function的声明处,然后修改你的GCC构建参数使用-fvisibility= hidden参数编译每一个源文件代码。GCC编译源代码文件的visibility默认属性是public,所以默认所有符号都导出
2015-04-07 13:34:53
719
原创 C++对象向基本类型转换
类类型A向float类型转换 struct A{ A(int v) { mValue = v; } operator float () { return mValue; }float mValue;};int main(int argc, char** arg
2015-04-07 13:25:36
295
原创 prototype 设计模式
概要 : 使用一个原型实例来指定要创建的对象, 通过拷贝原型来创建一个新的实例应用 : 当一个系统独立于对象的创建,构造过程,和表示的时候 1.当要实例化的类是在运行时指定的 2.避免创建一个平行于产品类层次的工厂类层次 3.当一个类的实例只有不同状态组合中一小部分, 通常安装特定数量的原型,通过拷贝而不
2015-04-07 10:42:18
345
原创 LeetCode Binary Tree Right Side View : 思想上的基于队列的广度优先遍历,形式上的一个简单变种
题目: Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom 思路 : 分别用二个队列存储上一层元素,以及基于上一层元素获得的下一层元素,并取出其最后一个元素
2015-04-07 10:30:58
337
转载 非递归深度优先遍历(来自百度百科)
非递归深度优先遍历:1. 栈初始化 2.输出其实顶点;起始顶点改为"已访问"标记,将起始顶点进栈3.重复下列操作直到栈为空; 3.1 取栈顶元素顶点;(注意不出栈) 3.2 栈顶元素顶点存在未被访问过的邻接点w,则 3.2.1 输出顶点w 3.2.2 将顶点w改为已访问标记 3.2.
2015-04-07 09:21:18
502
原创 用最小堆解决一个实际问题
问题描述如下: 一个公司要给多个部门分配办公室空间,总的空间是一定的,分配空间所需的时间正比于空间的大小比如, 总的空间的大小是1000,需要花费1000个单位时间来划分这些时间(不管是划分成300+700,还是划分为500 + 500,都是花费相同的时间) 但是总的时间取决于划分的顺序比如总的空间数是800,每个部门的空间大小是100,200,500如果首先划分成10
2015-04-03 17:29:20
486
原创 一个独立的资源加载线程,接收主线程的资源加载请求的思路
资源加载线程用一个请求队列维护所有的资源加载请求,如果没有资源加载请求进来就等待。该队列是个共享资源,所以需要一个锁来保护,还需要一个条件变量,当请求队列为空的时候,资源加载线程就需要在这个条件上等待,另外当请求队列为空的时候,而此时正好来了一个新的资源加载请求,需要统一在这个条件变量上等待的线程,唤醒它说有一个新的资源加载请求需要你来执行。 如果资源加载线程没有被阻塞,比如因
2015-04-03 16:39:00
426
原创 基于栈来实现二叉树的先根遍历
当年在淘宝最后一面的时候被问过这个问题,当时思路混乱,答的不好。 #include#includeusing namespace std;struct Node{ Node(char ch) { c = ch; left = NULL; right = NULL; }
2015-04-03 11:34:05
382
原创 成员函数指针,C++模板 和command设计模式结合实现的一种命令处理方式
#include#includeusing namespace std;// 先定义一个Command的基类class Command{public: virtual ~Command() { } virtual void Execute() = 0;protected: Command() {
2015-04-03 11:24:21
375
原创 用CMake创建OpenGLES的测试工程
测试工程的目录结构如下+CMakeLists.txt|+--+ src/| || +---- XX.c| /---- CMakeLists.txt+--+ libcommon/| || +--- xxx.h| +--- xxx.c| /--- CMakeLists.txt/-- + build顶层CMakeLists
2015-04-03 11:13:06
631
原创 确定一个子字符串在主字符串中出现了多少次
int match(string& text, string& pattern){ int textSize = text.size(); int patternSize = pattern.size(); int count = 0; int i = 0; int j = 0; while( i {
2015-04-02 10:33:11
444
原创 一种 bit 操作的应用
要构成一个黑白相间的棋盘,每个格子都是8x8的,如何利用bit操作来实现呢可以想象从0开始的第3个bit位,每递增8个数,都会在0和1之间切换,可以根据横向索引和纵向索引在第3个bit的值得异或来确定黑或者白 void makeCheckImage(void){ int i, j, c; for (i = 0; i < checkImageHeigh
2015-04-02 10:27:52
409
原创 二维数组的new 和 delete
int** matrix = new int* [n]; int i = 0; for(; i { matrix[i] = new int[n]; } for(i = 0; i {
2015-04-02 10:16:13
304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人