Leetcode题解(34)
113. Path Sum II
题目
分析:
主要考察二叉树深度优先遍历(DFS),递归调用当前节点的左右结点即可,代码如下(copy网上):
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
vector<vector<int> > ret;
public:
void dfs(TreeNode *node, int sum, int curSum, vector<int> a)
{
if (node == NULL)
return; if (node->left == NULL && node->right == NULL)
{
if (curSum + node->val == sum)
{
a.push_back(node->val);
ret.push_back(a);
}
return;
} a.push_back(node->val);
dfs(node->left, sum, curSum + node->val, a);
dfs(node->right, sum, curSum + node->val, a);
} vector<vector<int> > pathSum(TreeNode *root, int sum) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ret.clear();
vector<int> a;
dfs(root, sum, , a);
return ret;
}
};
上面的方法中,采用了递归,代码简单也利于理解,如果要是不采用递归该怎么求解呢?
---------------------------------------------------------------------------------------------------分割线-------------------------------------------------------------------------
116. 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) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode *root) {
if(NULL == root)
return; queue<TreeLinkNode*> myQue;
myQue.push(root);
myQue.push(NULL);//每一层的末尾添加一个NULL作为挡板
TreeLinkNode *temp;
while(!myQue.empty())
{
temp = myQue.front();
myQue.pop();
if(NULL != temp)
{
while(NULL != temp)
{
temp->next = myQue.front();
myQue.push(temp->left);
myQue.push(temp->right);
temp = myQue.front();
myQue.pop();
}
myQue.push(NULL);
}
}
}
};
-----------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------
121. Best Time to Buy and Sell Stock
题目
分析;
题目的意思就是给定一个数组,判断两个数差值最大,但是这个最大差值有个条件限制,就是前面一个数必须必后面一个数小。
这道题让我想起曾经看过的一道编程题,就是实现一个栈的Max函数,使得每时每刻都能获取栈中的最大值。这个函数的实现思想就是在每一层中都保存当前的最大值,如果有一个元素进栈,就和当前的最大值作比较,如果更大,就修改这个当前最大值。
这道题的思想也差不多,可以从后往前遍历数组,就相当于“进栈”,只不过这道题没有出栈操作。
代码如下:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int size = prices.size(); if(size<=)
return ; int res=;
int currentMax=prices[size-]; for(int i=size--;i>=;i--)//从倒数第二个数开始往前迭代
{
if(prices[i]>currentMax)
{
currentMax = prices[i];
}
else
{
if(currentMax - prices[i] > res)
res = currentMax - prices[i];
}
}
return res; }
};
Leetcode题解(34)的更多相关文章
- [LeetCode 题解]: Reverse Nodes in K-Groups
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a li ...
- 【LeetCode题解】7_反转整数
目录 [LeetCode题解]7_反转整数 描述 方法一 思路 Java 实现 类似的 Java 实现 Python 实现 方法二:转化为求字符串的倒序 Java 实现 Python 实现 [Leet ...
- 【LeetCode题解】350_两个数组的交集Ⅱ
目录 [LeetCode题解]350_两个数组的交集Ⅱ 描述 方法一:映射 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 Python 实现 [Lee ...
- [LeetCode 题解]: ZigZag Conversion
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 The string ...
- 【LeetCode题解】二叉树的遍历
我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...
- leetcode题解-122买卖股票的最佳时期
题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)
目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...
- 【LeetCode题解】844_比较含退格的字符串(Backspace-String-Compare)
目录 描述 解法一:字符串比较 思路 Java 实现 Python 实现 复杂度分析 解法二:双指针(推荐) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以 ...
随机推荐
- JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7、8性能对比)
转载请注明原创出处,谢谢! 因为每个链路都会对其性能造成影响,应该是全链路的修改压测(ak大神经常说全链路!).本次基本就是局域网,所以并没有怎么优化,其实也应该考虑进去的. Linux系统参数层面的 ...
- 常用Linux命令、包括vi 、svn
/etc/init.d/network restart//===========================================更新脚本cd /www/scripts更新站点./sta ...
- 当你的SSM项目中的springmvc.xml发生第一行错误解决方案
当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...
- 分享ES6中比较常用又强大的新特性
前言 es6有很多新东西,但是感觉常用的并不是很多,这里学习记录了一些我自己认为非常常用又强大的新特性. scoping 实用的块级作用域,let x = xxx 可以声明一个块级作用域的局部变量,简 ...
- GCD hdu1695容斥原理
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- E. Fish (概率DP)
E. Fish time limit per test 3 seconds memory limit per test 128 megabytes input standard input outpu ...
- vue传数据到模态框中
写一下我的做法 <a data-toggle="modal" data-target="#delete_tpl_modal" class="bt ...
- UWP 改变Button样式
-----some words------ 1.Control:控制 (我们理解成控件) 2.Template:模板 3.Ellipse 椭圆 4.Content 内容 5.Presenter 节目主 ...
- Linux下安装jdk8的详细步骤
一.登录Linux,切换到root用户 sudo su 二.在usr目录下建立java安装目录 cd /usr mkdir java 三.下载jdk 登录网址:http://www.oracle.co ...
- HDU2089 暴力打表
62的判断就是倒过来没有26 hdu2089 #include<cstdio> #include<cstdlib> #include<iostream> #incl ...