C++
文章平均质量分 69
fenfenmiao
这个作者很懒,什么都没留下…
展开
-
Number of Boomerangs
这道题的思路不是很难,就是要挨个算距离,然后做一个表,用排列组合的A算所求的值。问题在于,这道题,可以说是时间换内存。由于平方的数很大,如果你在for的最外边用map,内存是不够的,所以要在第一个平方里面用,会造成一些时间上的重复,ab ba都要算class Solution {public: int numberOfBoomerangs(vector>& points) {转载 2017-03-16 23:15:25 · 286 阅读 · 0 评论 -
leetcode stack 155 225 232
easy的栈,155取最小的元素,用两个栈,第二个栈存当前的栈的最小元素,然后弹出的时候根据情况弹出元素:class MinStack {public: /** initialize your data structure here. */ MinStack() { } void push(int x) { s1.p原创 2017-02-25 16:24:03 · 353 阅读 · 0 评论 -
heap的一些实现,二叉堆,左式堆,二项队列
//这里的堆指的都是二叉堆,为了优先队列产生(优先队列,使一些特殊的结点在出队的时候要优先出来。出队入队操作变成了insert和delete)//堆是一个完全二叉树,除了最后一层,其余层都是满的。这样的话存储用一个数组就可以,任一个元素位置在i,其左儿子位置是2*i,右儿子位置是2*i+1,父结点是i/2向下取整//完全二叉树的高度是logN的下界,所以涉及到完全二叉树的操作,是跟这个高度相关原创 2017-03-03 15:48:21 · 727 阅读 · 0 评论 -
Search Insert Position
这个思路比较简单,用二分查找。但是有一个问题,也是平时的问题,简单的问题容易因为边界条件等等想复杂,这道题就是,其实可以先写出来最主要的主干,然后看看这个主干能否适应这个问题,像二分查找,主干就是while(low我的版本:class Solution {public: int searchInsert(vector& nums, int target) { in原创 2017-01-29 19:04:28 · 447 阅读 · 0 评论 -
(重点)Remove Linked List Elements和Delete Node in a Linked List
删除操作,**是可以不考虑head的特殊情况的:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution原创 2017-01-29 14:40:09 · 338 阅读 · 0 评论 -
Reverse Linked List
这道题是把链表倒过来......活久见递归自己搞对了......递归效果好,不会有重复:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };原创 2017-01-29 15:20:24 · 181 阅读 · 0 评论 -
Intersection of Two Linked Lists
这道题找两个链表的交叉点,要点是找两个链表的长度差。找到长度差,然后去掉这个差两个链表一起走,就会相遇。有交叉点就在交叉点相遇,没有的话就是NULL。这个一个走到尾就到另一个的头结点的作用,就是把这个两个链表的差给去掉了。/** * Definition for singly-linked list. * struct ListNode { * int val; * L转载 2017-01-29 13:21:27 · 173 阅读 · 0 评论 -
Linked List Cycle
判断链表有没有环,可以用追击问题,一个走两步,一个走一步,如果能碰一起就是有环。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */原创 2017-01-28 20:00:11 · 179 阅读 · 0 评论 -
Remove Duplicates from Sorted List
链表问题如果没编过,查代码一定有哪里出现指针飞了,这个地方是null然而还操作....../** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }原创 2017-01-28 19:29:55 · 156 阅读 · 0 评论 -
链表List的代码,但是缺少保护
template //这里的实现是不改变data的class List{private: struct Node //struct是public的,这里把它作为private,也没毛病,就是Node里的东西List类都能用 { Object data; Node *prev; Node *next; Node(const Obje转载 2017-01-28 12:15:49 · 302 阅读 · 0 评论 -
i++和++i
i++是先使用再自加,比如:i=3;m=i++;那么m就是3,之后i是4;++i是先自加再使用,比如:i=3;m=i++;那么m和i都是4。前缀形式比后缀形式是快的,(++i比i++快),所以同样的需求,尽量用++i,比如for循环......原创 2017-01-28 11:15:13 · 269 阅读 · 0 评论 -
Merge Sorted Array
从后往前比,因为是往nums1里面插入,所以while循环nums2而不是nums1,当循环结束,nums1就不用动了:class Solution {public: void merge(vector& nums1, int m, vector& nums2, int n) { int i=m-1; int j=n-1;原创 2017-01-25 21:18:46 · 152 阅读 · 0 评论 -
Convert Sorted Array to Binary Search Tree
递归......注意看一下这里面指针,用new。new返回的是指向创建的对象的指针。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val原创 2017-03-01 23:13:10 · 214 阅读 · 0 评论 -
Binary Tree Level Order Traversal II
层序遍历,先用一个栈把结点分层塞进去,再逐个出栈:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri原创 2017-03-01 18:58:16 · 202 阅读 · 0 评论 -
hash,分离链接法,探测散列表(二次探测),再散列的代码
数据结构与算法分析C++版的搬运工......#include#include#includeusing namespace std;//字符串hash,把每个字符的ASCII码加起来,然后对tablesize取模,tablesize注意选择,一种策略是选素数,这样能比较均匀//一种很简单的hash,但是如果tableSize很大的话,分布就不会均匀/*int hash(co原创 2017-03-01 11:48:39 · 977 阅读 · 0 评论 -
Next Greater Element I
用遍历的办法,挨个比,效率比较低:class Solution {public: vector nextGreaterElement(vector& findNums, vector& nums) { int n=findNums.size(); int m=nums.size(); vector flag;原创 2017-02-25 17:39:16 · 240 阅读 · 0 评论 -
二叉树空链
N+1个。1个结点时有2个空,即左右儿子。之后每增加一个结点便使之前的一个空变成非空,但再新增2个空,即新增结点的左右儿子。转载 2017-02-26 10:13:45 · 574 阅读 · 0 评论 -
Lowest Common Ancestor of a Binary Search Tree
这是个BST,是有顺序的.......有顺序就好办了......./** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(N原创 2017-03-08 19:15:23 · 200 阅读 · 0 评论 -
Find All Anagrams in a String
用一个窗口......hash表的活学活用......class Solution {public: vector findAnagrams(string s, string p) { vector pv(256,0),sv(256,0),re; if(s.size()<p.size()) return re; for(转载 2017-03-16 19:20:39 · 251 阅读 · 0 评论 -
Find the Difference
妈呀又是神奇的异或……虽然哈希也可以,然而跟异或比起来就不值一提了……class Solution {public: char findTheDifference(string s, string t) { char r=0; for(auto c:s) r^=c; for(auto c:t) r^=c; ret转载 2017-03-13 19:50:03 · 256 阅读 · 0 评论 -
Intersection of Two Arrays
这个思路比较简单,想说下语法点。unordered_map是键值对,键hash,unordered_set就是一个hash集合,只是key的集合,方便快速查找的。同时set是红黑树,所以有两个很好的特点,有序,没有重复,而且O(logN)的效率也很高。这里对nums1做了一个unordered_set,就用了没重复的特性。class Solution {public: vector转载 2017-03-13 19:25:09 · 267 阅读 · 0 评论 -
Word Pattern
这个hash的模式之前也用过,Isomorphic Strings这道题用过,就是搞两个表,对两个比较的模式,key塞字符串,值塞第一次出现的位置,然后两个表的字符串,如果是对应的,那么相应的key的值是一样的,如果不对应(模式不一样),那么相应的key的值就不一样。还有一个就是字符串有空格,怎样拆分,这里用了一个流的模式:class Solution {public: bool原创 2017-03-12 21:45:35 · 419 阅读 · 0 评论 -
Isomorphic Strings
哈希表,哈希的思想,不一定都要用unordered_map的....class Solution {public: bool isIsomorphic(string s, string t) { int Se[256]={0}; int Te[256]={0}; int n=s.length(); fo原创 2017-03-12 18:56:57 · 224 阅读 · 0 评论 -
Count Primes
啊,不用埃拉托斯特尼筛法,怎样都是time超了......具体筛法就是那个图,下面这段话是别处找的,能理解大致意思,但是有一点我理解的和他不一样,这个找素数应该是遍历中当前的下一个没被标记的就是素数,而不用全找完了再遍历一圈,看下面的代码就知道了。这道题给定一个非负数n,让我们求小于n的质数的个数,题目中给了充足的提示,解题方法就在第二个提示埃拉托斯特尼筛法Sieve of Era转载 2017-03-12 11:04:40 · 227 阅读 · 0 评论 -
Happy Number
第一种,用哈希,每次算完一个平方和去表里看一看,如果这个不是1还和表重了,那就不是:class Solution {public: bool isHappy(int n) { unordered_map Fi; while(n!=1) { int sum=0; while(n!=0)原创 2017-03-12 10:09:25 · 317 阅读 · 0 评论 -
Single Number
可以用hash表:class Solution {public: int singleNumber(vector& nums) { unordered_map re; for(int i=0;i<nums.size();i++) { if(re.find(nums[i])==re.end())原创 2017-03-12 09:25:30 · 240 阅读 · 0 评论 -
Battleships in a Board
连着的横着的或者竖着的x就是一艘船,每两艘不会连着,比如它给的x . . x. . . x. . . x这个左面的x是一艘,右面的三个x是一艘,然后. . .xxxxx. . .x这样的不会给你,因为中间的左3个x和右边的竖三个x挨起来了,它不会给你挨起来的船。所以一种比较简单的办法,数一共多少个船头,一个x,是船头的话,它的左边和上边要不是原创 2017-03-11 20:20:55 · 241 阅读 · 0 评论 -
Minimum Absolute Difference in BST && Find Mode in Binary Search Tree
这个的思路就是BST中序遍历,得到的就是从小到大排的顺序,然后依次算两个的差,就能得到最小值/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : v转载 2017-03-11 18:34:31 · 215 阅读 · 0 评论 -
动态规划 House Robber;Best Time to Buy and Sell Stock
动态规划,可以看这个http://www.360doc.com/content/13/0601/00/8076359_289597587.shtml我理解的,就是如果一个方法用递归,你发现过程会有重复,比如斐波那契数列,a(n)=a(n-1)+a(n-2),然后就会出现每个被算n次的悲剧(3=1+2,5=2+3,8=3+5,算5的时候3被递归了,算8的时候,3被递归了,5又递归了3,这样往后算原创 2017-03-28 10:49:41 · 417 阅读 · 0 评论 -
回溯法和bitset Binary Watch
这个是在回溯法的标签里的。回溯法大致是这样,按照深度优先搜索,在解空间树里往前走,如果不行就回退,然后换一条路。在换路的同时剪去错枝,就是一种蛮力的有剪枝的遍历......于是我先用的回溯:class Solution {public: vector readBinaryWatch(int num) { vector re; vector bit(10原创 2017-03-28 10:38:38 · 468 阅读 · 0 评论 -
Balanced Binary Tree
这个麻烦在,对以一个结点为根的树,左右树都Balance,左右树的差小于1同时满足才行。第一种,每一个算Balance都要算到下面的height,然后复杂度O(N^2)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN原创 2017-03-07 14:56:07 · 246 阅读 · 0 评论 -
AVL树的一些实现
包含,插入,单旋转,双旋转,以及每次都要想好久的,除了结点里指针的其余的指针都想不清楚......又想了一遍......//AVL,二叉平衡树,任何一个结点,左右子树的高度差都不大于1的二叉搜索树template struct AvlNode{ Comparable element; AvlNode *left; AvlNode *right; int height; A原创 2017-02-27 17:08:22 · 244 阅读 · 0 评论 -
Path Sum III
啊这个递归总是会加重或者少加,办法就是你写出来那个过程,就知道哪里重了哪里少加了......../** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :原创 2017-03-08 21:13:29 · 211 阅读 · 0 评论 -
map的一个例子
吧一个字典中,有换一个字母还是一个单词并且超过15个的打出来。#include#include#include#includeusing namespace std;/**map应用的简单例子,说明了一些时候map怎么工作mapsalaries;salaries["Pat"]=75000; //左边调用operator[],因此插入“Pat”和一个值为0的double到原创 2017-02-28 15:11:51 · 302 阅读 · 0 评论 -
二叉搜索树的一些实现
二叉搜索树的实现,以及总要想的函数传参和返回值......一个关于返回值引用的链接:http://blog.csdn.net/keyouan2008/article/details/5741917//二叉排序树,每个结点的左子树都比这个结点小,右子树比这个结点大//构造,析构,找最大,最小,插入,删除,找树中是否含有某一个结点template class BinarySear原创 2017-02-27 15:18:03 · 327 阅读 · 0 评论 -
Reverse Integer和Palindrome Number
这个比较简单,但是要注意,溢出判断,用INT_MAX和INT_MIN:class Solution {public: int reverse(int x) { long long re=0; while(x!=0) { re=re*10+(x-x/10*10); x=x/10; } return (re>INT_MIN原创 2016-12-15 23:27:36 · 260 阅读 · 0 评论 -
ZigZag Conversion
第一种办法,简单粗暴的排着算,要求几行就设几个vector,然后就按照规则行数先加后减,依次加到vector里:class Solution {public: string convert(string s, int numRows) { vector a[numRows]; string str; int n=s.size();原创 2016-12-15 23:23:16 · 196 阅读 · 0 评论 -
C++ oj题
#include#include#include#includeusing namespace std;class student{public: string name; int age; int score;};bool cmp(student a, student b){ if (a.score != b.score) return a.score原创 2016-09-19 11:06:08 · 1082 阅读 · 0 评论 -
排序程序
#include#include#includeusing namespace std;//冒泡排序,排序不超过100个数字,升序,冒泡排序复杂度O(n^2)bool cmp(int a, int b){ return a > b;}int main(){ //输入部分,输入要排序几个数字以及数字 int buf[100]; int a; while (cin >> a原创 2016-09-19 10:26:41 · 361 阅读 · 0 评论 -
C++中sort用法
网址:http://www.cnblogs.com/sooner/archive/2012/04/18/2455279.htmlSTL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。sort()定义在在头文件中。sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快转载 2016-09-19 10:22:05 · 5131 阅读 · 0 评论