5.24 https://discuss.leetcode.com/topic/3294/accepted-c-o-n-solution
https://leetcode.com/problems/two-sum/#/description
更新
题目:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
咋一看要遍历俩次,其实只要遍历一次。倒过来看,倒着存数字进去,然后供后面的数字来查找。
代码如下:
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target)
{
vector<int> result;
unordered_map<int,int> u_map;
for(int i = 0;i<numbers.size();i++)
{
int check_num = target - numbers[i];
if(u_map.find(check_num)!=u_map.end())
{
//因为是倒过来查了
result.push_back(u_map[check_num]);
result.push_back(i);
return result;
}
u_map[numbers[i]]=i;
}
return result;
}
};
525 dfs不熟悉啊
https://leetcode.com/problems/path-sum/#/description
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool dfs(TreeNode* root, int sums, int sum)
{
if (root == NULL) return false;
sums += root->val;
if (root->left == NULL&&root->right == NULL)
{
if (sums == sum)
return true;
else
return false;
}
if (root->left != NULL)
if(dfs(root->left, sums, sum))
return true;
if (root->left != NULL)
if(dfs(root->right, sums, sum))
return true;
//sums -= root->val;
//return false;
}
bool hasPathSum(TreeNode* root, int sum) {
int sumss = 0;
return dfs(root, sumss, sum);
}
};