随笔分类 - LeetCode
摘要:组给出两个整数n和k,返回从1......n中选出的k个数的组合。 样例 例如 n = 4 且 k = 2 返回的解为: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]] 递归回溯思想,用k控制内循环次数,从而控制每一个元素中数的个数 class Solution: """
阅读全文
摘要:给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。 九章,简单思路。将删除节点转为重建二叉树。先遍历二叉查找树,将非删除节点值以外节点存入,然后重建二叉树。 有一个小bug,题意要求如果没有相同节点就不做任
阅读全文
摘要:设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。 样例 给出一个测试数据样例, 二叉树{3,
阅读全文
摘要:恢复内容开始 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3思路:前序遍历的第一个节点为根节点,在中序遍历中,其左边点数为根节点的左节点,右为右节点 class S
阅读全文
摘要:给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。 样例 一个例子: 2 / \ 1 4 / \ 3 5思路:左 < root <右
阅读全文
摘要:前序遍历 给出一棵二叉树,返回其节点值的前序遍历。 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. class Solution: """ @param: root: A Tree @return: Preorder in ArrayList which co
阅读全文
摘要:简单排序算法 1.插入排序,时间复杂度O(N^2),空间复杂度O(1) 针对一个已排序序列,将元素插入某位,后续元素后移 2.选择排序,时间复杂度O(n^2),空间复杂度O(1) 按递增方式选出元素,按顺序排放即可 3.交换排序 一个序列没排好序,那么其中一定有逆序存在,不断减少逆序对,则最终得到排
阅读全文
摘要:给定一个单链表L: L0→L1→…→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→… 必须在不改变节点值的情况下进行原地操作。 样例 给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。 思路: 将链表一分为二,后半段逆序插入前半段
阅读全文
摘要:给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。 注意事项 这个问题有两个方法,一个是贪心和 动态规划。 贪心方法时间复杂度为O(N)。 动态规划方法的时间复杂度为为O(n^2)。 我们手动设置小型数据集
阅读全文
摘要:给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。 找到删除 k 个数字之后的最小正整数。 N <= 240, k <= N 样例 给出一个字符串代表的正整数 A 和一个整数 k, 其中 A = 178542, k = 4
阅读全文
摘要:给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。 注意事项 最后的结果可能很大,所以我们返回一个字符串来代替这个整数。 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。 思路: 找到首数最大的,然后找其次位最大的。于是考虑转为str数组比较 cla
阅读全文
摘要:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油gas[i],并且从第_i_个加油站前往第_i_+1个加油站需要消耗汽油cost[i]。 你有一辆油箱容量无限大的汽车,现在要从某一个加油站出发绕环路一周,一开始油箱为空。 求可环绕环路一周时出发的加油站的编号,若不存在环绕一周的方案,则返回-
阅读全文
摘要:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 You may assume that the array is non-empty and the majority number always exist in the array. You may assume
阅读全文
摘要:给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 "ERROR"。 样例 n = "3.72", 返回 "ERROR". n = "3.5", 返回 "11.1" 思路: 将n转化为整数部分与小数部分,分别转化成字符串形式再相加,用到 s
阅读全文
摘要:如果要将整数A转换为B,需要改变多少个bit位? 注意事项 Both n and m are 32-bit integers. 样例 如把31转换为14,需要改变2个bit位。 (31)10=(11111)2 (14)10=(01110)2 按位与,非0累计 class Solution: """
阅读全文
摘要:有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 注意事项 木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回
阅读全文
摘要:假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。 你可以假设数组中不存在重复的元素。 样例 给出[4, 5, 1, 2, 3]和target=1,返回
阅读全文
摘要:你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1] 假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。 样例 给出数组[1, 2, 1, 3,
阅读全文
摘要:假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 你可以假设数组中不存在重复的元素。 样例 给出[4,5,6,7,0,1,2] 返回 0 顺序查找,当出现比起始元素小的值即为最小值,时间复杂度O(n) cl
阅读全文
摘要:写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3
阅读全文