606. 根据二叉树创建字符串 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 输入:ro
//升序排列 template <typename Comparable> int partition(vector<Comparable>& v, int left, int right) { if (left >= right) return left; int i = left, j = right; Comparable pivot = v[left]; while (i < j) { while (i &
57. 插入区间 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入:intervals = [[1,3],[6,9]], newInterval = [2,5] 输出:[[1,5],[6,9]] 示例 2: 输入:intervals = [[1,
113. 路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,
543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 :给定二叉树 1 / \ 2 3 / \ 4 5
222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点
java代码: 1 public static void main(String[] args) { 2 int arr[] = {2,7,1,5,9,6,10}; //要排序的数组 3 int temp[] = new int[arr.length]; //中间数组 4 mergeSort(arr,0,arr.length-1,temp); 5 System.out.println(Arrays.toStr
自己先写了一下,还是不会做树! 下面是自己的代码,仍然有问题,甚至考虑这种思路会不会做不出来! package leetcode01; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, Tr
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 使用HashMap来记录连续序列长度,并把结果保存到边界点。如,给定序列{1, 2, 3, 4, 5}, map.get(1) 与 map.get(5)均得到5。 当一个新元素n插入到map时,做下面两件事 查询n-1 和 n+1是否存在在map中,若存在,则表示序列延伸至n。变量l
凸优化 目录凸优化DualityLagrange function(拉格朗日函数)定义Lagrange duality function(拉格朗日对偶函数)定义性质Lagrange duality function 和 Conjugate function(共轭函数)Conjugate function 定义Lagrange duality function 与 Conjugate function 的关系Lagrange 对偶问题定义
题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 示
虽然过了,但是还是不是很清楚,中序遍历,访问每个非空节点时,将左指针置空,pre记录每个父节点,父节点的right置为当前节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :
给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3]输出:false 提示: 树中节点数目在范围 [1, 1000] 内-100 <= Node.val <= 100 进阶:你可以运用递归和迭代两种方法解决这个问题吗?
#include <iostream> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <unordered_map> using namespace std; struct TreeNode { int val = 0; TreeNode* left = nullptr; TreeNode*
Eq(75) \[\left( \begin{matrix} \frac{1}{2}\left( 1+cos\theta \right)& \frac{1}{2}sin\theta e^{-i\varphi}\\ \frac{1}{2}sin\theta e^{i\varphi}& \frac{1}{2}\left( 1-cos\theta \right)\\ \end{matrix} \right) \\ \frac{1}{2
描述 二分查找扩展:如果数组有序,且存在多个目标值,查询所有目标值索引返回。 public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); int[] arr = {1, 2, 2, 2, 3, 4, 5, 6, 7}; List list1 = binarySea
一、题目大意 https://leetcode.cn/problems/valid-palindrome-ii/ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: s = "aba" 输出: true 示例 2: 输入: s = "abca" 输出: true 解释: 你可以删除c字符。 示例 3: 输入: s = "abc" 输出
Given an array arr, replace every element in that array with the greatest element among the elements to its right, and replace the last element with -1. After doing so, return the array. Example 1: Input: arr = [17,18,5,4,6,1] Output: [18,6,6,6,1,-1] Exp
给你区间的 空 集,请你设计并实现满足要求的数据结构 新增:添加一个区间到这个区间集合中。 统计:计算出现在 至少一个 区间中的整数个数。 实现 CountIntervals 类: CountIntervals() 使用区间的空集初始化对象 void add(int left, int right) 添加区间 [left, right] 到区间集合之
左侧边界原思路 int left_bound(int[] nums, int target) { if(nums.length == 0) return -1; int left = 0; int right = nums.length; while(left < right){ int mid = left + (right - left) / 2; if(nums[mid] == target){ right = mid; }else if(nums[mid] &l
二分搜索 最常见的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。分析细节差异和原因 仅局限于【在有序数组中搜索指定元素】 //寻找一个数 //搜索一个数,如果存在,返回其索引,否则返回-1 int binarySearch(int[] nums,int target){ int left = 0,right = nums.length - 1;/
15. 三数之和 首先将数组排序,然后用一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。 依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i] b = nums[left] c = nums[right]。 如果nums[i] + nums[left]
一、题目大意 https://leetcode.cn/problems/maximum-average-subarray-i/ 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于10^(-5)的答案都将被视为正确答案。 示例 1: 输入:nums = [1,12,
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 类似层次遍历,无须使用队列,使用已建立好的next指针,跳到下一层。 2、代码实现 package Q0199.Q0117PopulatingNextRightPointersinEachNodeII; import DataStructure.Node; public class Solution { public Node connect(N
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示