
算法
damon guan
这个作者很懒,什么都没留下…
展开
-
construct-binary-tree-from-preorder-and-inorder-traversal
/*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/cla...原创 2019-10-17 22:52:04 · 121 阅读 · 0 评论 -
construct-binary-tree-from-inorder-and-postorder-traversal
/*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/cla...原创 2019-10-17 22:47:13 · 122 阅读 · 0 评论 -
Populating Next Right Pointers in Each Node
处理时每层节点都是个链表。将该链表的左右子节点连接起来。【尝试用递归,但出现超时】/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(i...原创 2019-10-13 00:47:30 · 110 阅读 · 0 评论 -
恢复二叉搜索树
题目描述二叉搜索树(BST)中的两个节点被错误地交换了,请在不改变树的结构的情况下恢复这棵树。思路:二叉树两个节点被交换,存在两种情况。case 1 是父节点和子节点被交换。case 2是不相邻的两个节点被交换。利用二叉树搜索树中序遍历有序性,如果是case 1, 则发生逆序的两个节点为需要交换值的两个节点;如果是case 2,则存在两处发生逆序的地方, 发生逆序第一处的值被...原创 2019-10-06 00:24:14 · 261 阅读 · 0 评论 -
通过循环遍历二叉树
#include<iostream>#include<stack>struct Node{ int data; Node* left; Node* right; Node() : data(0), left(NULL), right(NULL) {};};Node* buildHeap(int * a, int aSize)...原创 2019-08-31 21:26:30 · 600 阅读 · 0 评论 -
两个有序数组中找到第k大的元素
1. 求第k大的数,可以定义两个游标(i,j)分别指向两个有序数组(a[], b[]),a[i] > b[j] 则j++,result= b[j];否则i++。移动一次则count++,当count等于k时,返回result。代码如下:#include <iostream>int getRankData(int a[], int aSize, int b[], i...原创 2019-08-31 17:19:45 · 2792 阅读 · 0 评论 -
有一组不同高度的台阶,用一个整数数组表示,数组中每个数是台阶的高度,雨后(雨水足够多)台阶之间的水坑会积水多少呢?
如数组int height[] = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};对应积水如下图:图转自:https://blog.youkuaiyun.com/Thomas0713/article/details/83051990如果要形成积水,则积水两旁的台阶上高于积水区的。而积水体积计算则是最低台阶与两边台阶最低的差。代码:#include <...原创 2019-08-28 22:10:34 · 1133 阅读 · 0 评论 -
链表反转
#include<iostream>struct Node{ int data; Node* next; Node() : data(0), next(NULL) {}};//反转逻辑Node* reverse(Node* p){ Node* last = NULL; while (p) { Node*...原创 2019-08-26 23:11:32 · 95 阅读 · 0 评论 -
无序链表去重
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-08-22 23:43:20 · 821 阅读 · 0 评论 -
两个链表相加求和
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,返回和。若链表存储是从高位开始存储,则将链表先反转再相加。反转链表实现#include<iostream>#include<sstream>#include<vector>struct Node{...原创 2019-08-26 00:24:57 · 1587 阅读 · 0 评论 -
一个整型数组里除了一个数字之外,其他的数字都出现了两次,找出出现一次的数字
当两个数字相同,则这两个数字异或得到0,0异或数字还是原来的数字。#includeint findunique(int *a,int len){ int result=0,i; for(i=0;i result=result^a[i]; return result;}void main(){ int a[9]原创 2015-01-16 16:34:39 · 539 阅读 · 0 评论 -
点亮灯泡问题
//deng pao#includevoid main(){ int i=1,j,a[65535]={0},n,b[65535]={0}; scanf("%d",&n); for(i=1;i b[i]=i; for(i=1;i for(j=0;j { j=i+j;原创 2015-01-16 16:06:59 · 502 阅读 · 0 评论