- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 leetcode:Validate Binary Search Tree
最开始我犯了个错误,直接递归判断根节点的值是否在左孩子节点和右孩子节点值得中间,忽略了应该是根节点的值大于左子树所有节点的值,小于右子树所有节点的值,导致代码如下:bool isValidBST(TreeNode* root) { if(root==NULL) return true; else if(root->left&&!root->ri
2015-05-29 00:28:15 963
原创 c++学习记录:operator = 重载
《effective c++》的确是一本神书,阅读起来的感觉可以用酣畅淋漓来形容,似乎很多以前没有在意的小细节都变得豁然开朗了起来,在条款10中,scott建议我们重载操作符’=’时,返回一个*this的引用。 赋值,我们往往可以写作连锁形式: int x,y,z;x = y = z = 10;赋值采用了右结合律,所以以上连锁赋值被解析为:x = (y = (z = 10));首先15
2015-04-21 00:37:10 1137
原创 leetcode:Roman to Integer
class Solution {public: int romanToInt(string s) { int map[128]; if(s.size()==0) return 0; map['I']=1; map['V']=5; map['X']=10; map['L'
2015-04-18 17:14:11 659
原创 leetcode:Number of Islands
其实该题为求连通子图的个数,可以借助DFS的思想:class Solution {public: bool dfs(int i,int j,vector<vector<char>> &grid) { if(i>=0&&i<grid.size()&&j>=0&&j<grid[i].size()&&grid[i][j]=='1') {
2015-04-18 13:45:09 3698
原创 弱菜的研究生生活系列一
最近生物钟严重紊乱,每天到了凌晨三点多钟才会缓缓进入睡眠。所以在看到36岁清华计算机硕士毕业生猝死的新闻,突然意识到我真的得注重自己的健康了。 说到身体状况,我记得去年13年九月份开始准备考研以来,头发开始变得有点稀少了,后来回家过年保养了段时间才慢慢打住这个不好的趋势,虽然比起以前状况是大大的不如了。 这两个星期对于实验室的项目很是懈怠,基本毫无进展,看样子明天的组会又会是痛苦难熬的了。我总结
2015-04-16 03:02:17 2133 5
原创 opengl:凸包算法
准备工作判断点在有向线段的左侧可以通过叉积判断,如下为k在有向线段ab的左侧代码描述:double multiply(Point a, Point b, Point k){ double x1 = b.x-a.x; double y1 = b.y-a.y; double x2 = k.x-a.x; double y2 = k.y-a.y; return x1
2015-04-15 00:29:33 2053
原创 opengl:绘制球体
数学基础球面参数方程球面的参数曲线可以用球坐标表示,引入参数u,v,其中v是球面点与原点的连线与z轴正向的夹角,u表示连线在xy平面的投影与x轴正向的夹角,如下图所示:则球面参数方程可以表示为:球面法向量已知球面的参数方程以后,很容易求得给定点的法向量,分别对u和v方向求偏导数,然后对两个所得向量进行叉积即可: 实现细节已知参数方程以后,需要进行离散,分别设定u和v的步长:ustep、vstep。
2015-04-13 01:47:03 45709 11
原创 leetcode:Rotate List
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *rot
2015-04-11 23:10:26 551
原创 leetcode:Factorial Trailing Zeroes
注意越界!class Solution {public: int trailingZeroes(int n) { int sum = 0; long long i =5; while(i<=n) { sum += n/i; i *= 5; } re
2015-04-11 22:16:44 595
原创 leetcode:Sort Colors
1:class Solution {public: void sortColors(int A[], int n) { int b[3] = {0,0,0}; for(int i=0;i<n;i++) { b[A[i]]++; } int i=0,j=0,k=0; for
2015-04-11 00:43:16 658
原创 leetcode:Symmetric Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solutio
2015-04-05 00:17:03 479
原创 leetcode:Subsets
class Solution {public: vector<vector<int> > subsets(vector<int> &S) { vector<vector<int>> res; vector<int> list; if(S.size()==0) { res.push_back(list);
2015-04-04 17:59:06 504
原创 -2147483648
我们写程序中可能会经常碰到overflow的情形,其中对-2147483648的处理一不小心就会出现数据overflow。 -2147483648 = -2^31,我们知道这是64位系统中int型能表示的最小值,这个时候我们要小心对其进行操作,比如执行如下程序:int a = -2147483648;int b = a*-1;int c = a-1;可以发现结果为: 这是为什么呢? 先
2015-04-04 00:50:00 23822
原创 leetcode:Divide Two Integers
class Solution {public: int divide(int dividend, int divisor) { long long div = dividend,dis = divisor; div = abs(div); dis = abs(dis); long long res = 0; w
2015-04-03 23:38:49 592
原创 leetcode:Climbing Stairs
class Solution {public: int climbStairs(int n) { vector<int> table; table.push_back(0); table.push_back(1); table.push_back(2); if(n<=2) return
2015-04-03 21:15:45 492
原创 leetcode:Populating Next Right Pointers in Each Node
/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {
2015-04-03 20:14:13 513
原创 来说说二叉树非递归遍历
二叉树的遍历早之前和同学聊天时,就提到了当时实习面试有一题就是要求非递归实现二叉树遍历,二叉树本身就是一种通过递归定义的数据结构,所以用递归的方法遍历二叉树是很容易的,而二叉树的遍历又分为前序遍历,中序遍历以及后序遍历,其中非递归的算法前序遍历和中序遍历稍简单,后序遍历稍复杂,并且都要用到栈,下面算法以如下二叉树为例: 则算法遍历的路线图如下所示:前序遍历前序遍历中,对于任一节点P可以看成根节
2015-04-02 20:54:11 636
原创 leetcode:Binary Tree Inorder Traversal
class Solution {public: vector inorderTraversal(TreeNode *root) { vector res; stack s; TreeNode * p = root; while(p!=NULL||!s.empty()) { while(
2015-04-02 16:32:22 536
原创 leetcode:Binary Tree Preorder Traversal
class Solution {public: vector preorderTraversal(TreeNode *root) { vector res; stack s; TreeNode * p = root; while(p!=NULL||!s.empty()) { while
2015-04-02 16:30:19 555
原创 leetcode:Binary Tree Postorder Traversal
class Solution {public: vector postorderTraversal(TreeNode *root) { vector res; stack>s; TreeNode *p = root; while(p!=NULL||!s.empty()) { while
2015-04-02 16:29:08 631
原创 来说说二分查找
二分查找是我们经常会遇到的算法,思路清晰,代码简洁。二分查找要求序列有序,且支持随机存取,一般情况下我们讨论的序列不存在相同元素,则二分查找可以很熟练的表示如下:int binsearch(int A[], int n, int target) { int left=0,right=n-1,res=-1; while(left<=right)
2015-04-01 16:13:59 510
原创 leetcode:Search for a Range
class Solution {public: int searchLowerBound(int A[], int n, int target) { int left=0,right=n-1,res=-1; while(left<=right) { int mid = left+((right-left)>>
2015-04-01 16:09:30 344
原创 leetcode:Permutations
class Solution { vector > ret; int N; public: void perm(vector &num, int i){ if( i == N){ ret.push_back(num); } for(int j = i; j < N;
2015-04-01 16:08:24 371
原创 leetcode:Partition List
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *pa
2015-04-01 16:07:05 399
原创 leetcode:Repeated DNA Sequences
class Solution {public: char hash[1024*1024]; vector findRepeatedDnaSequences(string s) { vector res; if(s.size()<10) return res; char convertor[26];
2015-04-01 16:06:37 430
原创 leetcode:Rotate Array
class Solution {public: void rotate(int nums[], int n, int k) { k = k%n; reverse(nums,0,n-k-1); reverse(nums,n-k,n-1); reverse(nums,0,n-1); } voi
2015-04-01 16:04:57 341
原创 leetcode:Reverse Bits
class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t m = 0; for(int i=0;i<32;i++) { m = (m<<1)+(n&0x1); n = n>>1; }
2015-04-01 16:03:00 402
原创 leetcode:Number of 1 Bits
1:class Solution {public: int hammingWeight(uint32_t n) { int count = 0; while(n) { if(n&0x1==1) { count++; }
2015-04-01 16:01:27 389
原创 UVa:1597 - Searching the Web
题目思路:首先需要构造出关键词的字典,提取关键字有一个小技巧:可以把字符串中所有非英文字母化为空格,然后用stringstream读取void updatedic(string str,int doc_id,int row_id){ string word; for(int i=0;i<str.size();i++) { if(isalpha(str[i])) str[i
2015-03-25 13:24:27 1978
原创 UVa:1596 - Bug Hunt
题目描述:输入并模拟一段程序,输出第一个bug所在的行。每行程序有两种可能:数组定义:格式为arr[size],例如a[10];赋值语句:格式为arr[index]=value,例如a[0]=3或者a[a[0]]=3赋值语句可能会出现两种bug:下标index越界,使用未初始化变量。思路:本题有两个关键点,首先在于程序中已经出现的数组以及已经赋值过的元素的存储,可以采用
2015-03-18 14:15:27 2795 1
原创 jquery获取下拉框的值
最近一个项目需要做前端,捡起好久不用的js,下拉框是我们经常用到的控件,有以下几种获得选中项的值:$("#select_id").find("option:selected").text();$("#select_id").val();$("#select_id").attr("value");其中需要主要的是第一种获得的内容可以包含空格,第二种和第三种获得的内容都不能包含空格
2015-03-13 23:08:03 4731
原创 UVa: 12100 - Printer Queue
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3252题目描述:有一些文件需要打印机打印,每个人物有不同的优先级(1-9),打印机的运作方式为:首先从打印队列里取出一个任务J,如果队列里有比J更急的任务,则直接把任务放到打印队列的尾部,否则打
2015-01-30 17:39:42 1890
原创 UVa: 1595 - Symmetry
题目链接:http://http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4470题目描述:给出平面上N(N则左边的图形有对称轴,右边没有。思路:如点集存在对称轴,则对称轴为点集x坐标和的平均。然后用set存储每个点(输入点不同),
2015-01-29 19:54:08 4017 1
原创 UVa: 10391 - Compound Words
题目描述:给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词。输入每行都是一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过12000个单词。输出所有的复合词按照字典序从小到大排列。思路:用set存储所有的单词,对于每个单词,遍历所有可能子单词组合,然后判断在set中是否都已经存储,若是则输出该单词。算法复杂度为O(n*lgn*|S|),其中|S|表示单词最大长度。
2015-01-28 13:18:46 951 2
原创 vs2012配置OpenGL SuperBible5环境
刚拿到opengl编程宝典第五版,打算配置好书中源码的编程环境,折腾了一天,终于弄好了,现在记录下完整的过程:为了方便,可以新建三个文件夹,用来放置所需的h文件,lib文件,dll文件。这里我把所有以下的文件提供下载,包括h,lib,dll三个文件夹,地址为:http://pan.baidu.com/s/1pJG6NAb1.freeglut下载地址:http://http://so
2015-01-27 01:27:18 2152
原创 UVa 10763 - Foreign Exchange
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1704题目描述:有n个学生想交换到其他学校学习。为了简单起见,规定每个想从A学校交换到B学校的学生必须找一个想从B交换到A的“搭档”。如果每个人都能找到搭档(一个人不能当多个人的搭档),学校就回
2015-01-25 14:18:09 568
原创 UVa 10935 - Throwing cards away I
链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1876题目描述:桌上有n(n题目比较简单,注意输出格式,当n=1时,“Discarded cards:”后没有空格。代码如下(vs2012运行通过):// 10935.cpp : 定义控
2015-01-25 12:02:11 996
原创 vignette滤镜效果
vignette滤镜效果:把图像边缘像素变暗,中心元素变得明亮。首先看看效果,原图如下:滤镜处理后的效果:实现思路:变暗——对彩色图像而言,对每个像素的三个通道即RGB分别减去一个相同的值v(保证变化后的像素值在0~255之间)。v值的确定——p*当前像素点point距离中点的距离的平方/图像四个顶点到中点的距离的平方。(p的值可控制)关键代码(项目中一部分,只用领
2015-01-24 00:55:40 1573
原创 Ducci Sequence
题目描述:对于一个n元组(a1,a2,......an),可以对于每个数求出它和下一个数的差的绝对值,得到一个新的n元组(|a1-a2|,|a2-a3|,......|an-a1|)。重复这个过程,得到的序列称为Ducci序列,例如:(8,11,2,7)->(3,9,5,1)->(6,4,4,2)->(2,0,2,4)->(2,2,2,2)->(0,0,0,0)。也有的序列最终会循环。输入n元组(
2015-01-24 00:30:35 1372 1
原创 代码对齐
题目描述:输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行,样例输入与输出如下:输入: start: integer; // begin herestop: integer; // ends here s: string;c: char; // te
2015-01-23 20:38:38 950
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人