随笔分类 - 算法之路
这里集大家之长,收录了许多大佬的解题思路(注:很多并非我原创,仅做收录,便大家查阅)
摘要:1. 概述 二分查找的思想是在有序数组里根据中间值来收缩搜索空间。时间复杂度为O(log(n))。 2. Code实现 2.1 常规 1 # 数组查找是否某个数,存在返回其下标, 2 def binarySearch_any(self, nums, target): 3 if not nums or
阅读全文
摘要:1. 题目 请实现两个函数,分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 2. 示例 输入:root = [1,2,3,null
阅读全文
摘要:1. 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列
阅读全文
摘要:1. 题目 转自:原文 所谓回文数就是一个数字,从左边读和从右边读的结果都是一样的,例如12321。现在有一个只包含1,2,3的数字,你可以通过在任意位置增加一位数字或者删除一位数字来将其变成一个回文数。但是增加或删除不同数字所需要的代价是不一样的。已知增加和删除每个数字的代价如下: * 增加一个
阅读全文
摘要:1. 题目 小明得到一个只包含a,b两个字符的字符串,但是小明不希望在这个字符串里a出现在b左边。现在他可以将”ab”这样的子串替换成”bba”,在原串中的相对位置不变。输出小明最少需要操作多少次才能让一个给定字符串所有a都在b的右边。(牛客网:https://acm.nowcoder.com/qu
阅读全文
摘要:1. 题目 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 2. 示例 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 3. 题解 本题
阅读全文
摘要:1. 题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5
阅读全文
摘要:1. 题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 2. 示例 MinStack minStack = new MinStack(); minStack.push(-2); minStack
阅读全文
摘要:1. 题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 2. 示例 示例1: 输入:head = [[7,null],[13,0],[11,4],[10
阅读全文
摘要:1. 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点 2. 示例 示例1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4
阅读全文
摘要:1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 2. 示例 1 输入: 1->2->3->4->5->NULL 2 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 3. 题解 本题给了两种解题方式:栈和迭代 栈 因为本
阅读全文
摘要:1. 题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 2. 示例 输入: n = 1 输出: [1,2,3,4,5,6,7,8,9] 3. 题解 此题十分简单。 首先计算总共有多个数 然后遍历输出即可 4. 实现
阅读全文
摘要:1. 题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。 2. 示例 示例1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示
阅读全文
摘要:1. 题目 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。 2. 示例 给定一个链表: 1->2
阅读全文
摘要:1. 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 2. 示例 示例1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,1
阅读全文
摘要:1. 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。 2. 提示 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数
阅读全文
摘要:1. 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 2. 示例 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 3. 题解 双指针法: 判断是否符合左边奇数右
阅读全文
摘要:1. 题目 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 1. 若干空格 2. 一个 小数 或者 整数 3. 可选)一个 'e' 或 'E' ,后面跟着一个 整数 4. 若干空格小数(按顺序)可以分成以下几个部分: 1. (可选)一个符号字符('
阅读全文
摘要:1. 题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如:给定的树 A: 3 / \ 4 5 / \ 1 2 给定树B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值
阅读全文
摘要:1. 题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1
阅读全文