当前位置: 首页 > news >正文

【刷题笔记】--两数之和Ⅳ,从二叉树中找出两数之和

2886aff88fe049ed9c43555c75e24a8a.png


 法一:深度搜索+中序遍历+双指针

思路:通过中序遍历二叉树得到一个递增的数列,再在这个递增的二叉树中找到这两数。

主要学到双指针这个方法。

对于一般数列,我们要找到两数满足其之和等于目标数,我们一般会进行暴力,即两重循环:

for(i=0;i<length;i++){for(j=i+1;j<length;j++){}
}

 对于暴力,我们要把下图的空白格全都依次检验,贼费时间。

f9efaea1d1ae4cafb6b2a008f73046f9.png


 而如果设置双指针,对应 i 和 j ,分别指向数组的头和尾。

如果a[0]+a[7]<target,说明a[0]+a[1],a[0]+a[2],a[0]+a[3],a[0]+a[4].....全都不满足,我们就可以直接把a[0]+的所有数给全部排除。 即把i=0时的那一排全排除了。

如果a[0]+a[7]>target,说明a[1]+a[7],a[2]+a[7],a[3]+a[7]......全不满足,我们就可以把j=7的那一列全排除了。

总结就是 i 是指向数组头的指针,如果i 右移,则删排,j 是指向数组尾的指针,如果j 左移,则删列。

这是缩减搜索空间的思想。

题解参考一张图告诉你 O(n) 的双指针解法的本质原理(C++/Java) - 两数之和 II - 输入有序数组 - 力扣(LeetCode)


代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
void inorderTraversal(const struct TreeNode* node, int* vec, int* pos) {if (node == NULL) {return;}inorderTraversal(node->left, vec, pos);vec[(*pos)++] = node->val;inorderTraversal(node->right, vec, pos);
}bool findTarget(struct TreeNode* root, int k) {int * vec = (int *)malloc(sizeof(int) * 10000);int pos = 0;inorderTraversal(root, vec, &pos);int left = 0, right = pos - 1;while (left < right) {if (vec[left] + vec[right] == k) {return true;}if (vec[left] + vec[right] < k) {left++;} else {right--;}}free(vec);return false;
}

http://www.lryc.cn/news/6870.html

相关文章:

  • 浏览器渲染原理JavaScript V8引擎
  • 在TheSandbox 的「BOYS PLANET」元宇宙中与你的男孩们见面吧!
  • 数据结构与算法:java对象的比较
  • python(16)--类
  • CNI 网络流量分析(七)Calico 介绍与原理(二)
  • API安全的最大威胁:三体攻击
  • 分布式事务解决方案——TCC
  • ITSS认证分为几个级别,哪个级别最高
  • ZigBee案例笔记 - USART
  • java | 基于Redis的分布式锁实现①
  • 十六、基于FPGA的CRC校验设计实现
  • 2022爱分析 · DataOps厂商全景报告 | 爱分析报告
  • 京东前端react面试题及答案
  • TongWeb8数据源相关问题
  • 关于最近大热的AI,你怎么看?
  • 25.架构和软件产品线
  • Seata-server 源码学习(一)
  • 2023新华为OD机试题 - 斗地主(JavaScript)
  • 素数相关(结合回文数,合数)线性筛素数(欧拉筛法)Euler【算法模板笔记】
  • 1.7配置OSPF手动汇总
  • 多线程下载工具axel的安装和使用
  • 大数据专业职业前景如何
  • 拉格朗日乘数法在原材料选择问题上的具体应用
  • 零信任-腾讯零信任iOA介绍(4)
  • 标准的maven依赖包应该包含哪些东西?
  • 网络安全-Nmap
  • 【物联网】mqtt初体验
  • 2023年阿里云活动有哪些实例规格的云服务器?如何选择这些实例规格
  • 深入理解 Handler(java 层 + native 层)
  • 初步认识操作系统(Operator System)