590. N 叉树的后序遍历(简单)
590. N 叉树的后序遍历(简单)给定一个 N 叉树,返回其节点值的 后序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
进阶:
递归法很简单,你可以使用迭代法完成此题吗?
示例 1:12345678输入:root = [1,null,3,2,4,null,5,6]输出:[5,6,3,2,4,1]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[2,6,14,11,7,3,12,8,4,13,9,10,5,1]
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal
思路1:就是参照二叉树的后序遍历,递归方法
思路2:参考后序遍历的非递归写法
代码1:12345678910111213class Solution { ...
98. 验证二叉搜索树(一般)
98. 验证二叉搜索树(一般)给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
示例 1:12345输入: 2 / \ 1 3输出: true
示例 2:123456789输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree
思路1:中序遍历,判断如果有序就是正确的,否则不正确
思路2:递归
代码:12345678910111213141516171819class Solution { //坑爹啊,这个用例,超过int long value = ...
56. 合并区间(一般)
56. 合并区间(一般)以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
示例 1:123输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:123输入:intervals = [[1,4],[4,5]]输出:[[1,5]]解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
提示:1 <= intervals.length <= 104intervals[i].length == 20 <= starti <= endi <= 104
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-intervals
思路:按照右,下,左,上 ...
134. 加油站(一般)
134. 加油站(一般)在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。
示例 1:1234567891011121314输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输出: 3解释:从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油开往 2 号加油站,此时油箱有 6 - 4 + 3 ...
面试题 01.01. 判定字符是否唯一(简单)
面试题 01.01. 判定字符是否唯一(简单)实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:输入: s = “leetcode”输出: false
示例 2:输入: s = “abc”输出: true限制:
0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/is-unique-lcci
思路:直接用set进行接收就行,如果存在就false,不存在就add
代码1:123456789101112131415class Solution { public boolean isUnique(String astr) { HashSet<Character> set = new HashSet<Character>(); for (int i=0;i<astr.length();i++){ if(set.cont ...
88. 合并两个有序数组(简单)
88. 合并两个有序数组(简单)给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:12输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]
示例 2:12输入:nums1 = [1], m = 1, nums2 = [], n = 0输出:[1]
提示:nums1.length == m + nnums2.length == n0 <= m, n <= 2001 <= m + n <= 200-109 <= nums1[i], nums2[i] <= 109
来源:力扣(LeetCode)链接:https://leetco ...
33. 搜索旋转排序数组(一般)
33. 搜索旋转排序数组(一般)整数数组 nums 按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4
示例 2:输入:nums = [4,5,6,7,0,1,2], target = 3输出:-1
示例 3:输入:nums = [1], target = 0输出:-1
提示:1 <= nums.length <= 5000-10^4 <= num ...
26. 删除有序数组中的重复项(一般)
26. 删除有序数组中的重复项(一般)给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:1234567891011121314为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。for (int i = 0; i < len; i++) { print(nums[i]);}
示例 1:123输入:nums = [1,1,2]输出:2, nums ...
80. 删除有序数组中的重复项 II(一般)
80. 删除有序数组中的重复项 II(一般)给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
说明:1234567891011121314为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。for (int i = 0; i < len; i++) { print(nums[i]);}
示例 1:123输入:nums = [1,1,1,2,2,3]输 ...
781. 森林中的兔子(一般)
781. 森林中的兔子(一般)森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。
返回森林中兔子的最少数量。
示例:1234567891011121314输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。因此森林中兔子的最少数量是 5: 3 只回答的和 2 只没有回答的。输入: answers = [10, 10, 10]输出: 11输入: answers = []输出: 0
说明:answers 的长度最大为1000。answers[i] 是在 [0, 999] 范围内的整数。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rab ...