随笔分类 - 算法刷题之旅
【剑指offer】44. 连续子数组的最大和(二)
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,找到一个具有最大和的连续子数组。 1.子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 2.如果存在多个最大和的连
【剑指offer】43.买卖股票的最好时机(一)
摘要:总目录: 算法之旅导航目录 1.问题描述 假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
【剑指offer】42.跳台阶扩展问题
摘要:总目录: 算法之旅导航目录 1.问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。 数据范围:1≤n≤20 进阶:空间复杂度 O(1), 时间复杂度 O(1) 2.问题分析 同普通上台阶类似,只不过状态转移方程有所变
【剑指offer】41.跳台阶
摘要:总目录: 算法之旅导航目录 1.问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 数据范围:1≤n≤40 要求:时间复杂度:O(n),空间复杂度: O(1) 2.问题分析 问题的关键是状态转移方程, 倒序考虑,从最高
【剑指offer】40.斐波那契数列
摘要:总目录: 算法之旅导航目录 1.问题描述 大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。 斐波那契数列是一个满足 f(x)= {1,当x=1,2; f(x−1)+f(x−2),当x>2}的数列; 数据范围:1≤n≤40 要求:空间复杂度 O(1),时间复杂度
【剑指offer】40.连续子数组的最大和
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。 数据范围: 1<=n<=2×10^5 −100<=a[i]<=100 要求:时间复杂度为 O(n),空间复杂度为 O(n) 进阶:
【剑指offer】39.字符串的排列
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数据范围:n<10 要求:空间复杂度 O(
【剑指offer】38.二维数组中的查找
摘要:总目录: 算法之旅导航目录 1.问题描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1,2,8,9], [2,4,9,12], [4
【剑指offer】37.数字序列中某一位的数字
摘要:总目录: 算法之旅导航目录 1.问题描述 数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。 数据范围: 0≤n≤10^9 2
【剑指offer】36.旋转数组的最小数字
摘要:总目录: 算法之旅导航目录 1.问题描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。 数据
【剑指offer】35. 数字在升序数组中出现的次数
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数 数据范围:0≤n≤1000,0≤k≤100,数组中每个元素的值满足 0≤val≤100 要求:空间复杂度 O(1),时间复杂度 O(logn) 2.问题分析 主要是要求
【剑指offer】34.滑动窗口的最大值
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2
【剑指offer】33.栈的压入、弹出序列
摘要:总目录: 算法之旅导航目录 1.问题描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的
【剑指offer】32.翻转单词序列
摘要:总目录: 算法之旅导航目录 1.问题描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了
【剑指offer】31.包含min函数的栈
摘要:总目录: 算法之旅导航目录 1.问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。 此栈包含的方法有: push(value):将value压入栈中 pop():弹出栈顶元素 top():
【剑指offer】30.用两个栈实现队列
摘要:总目录: 算法之旅导航目录 1.问题描述 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 数据范围: n≤1000 要求:存储n个元素的空间复杂度为
【剑指offer】29.序列化二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字符串进行约束,但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉树的序列化(Serialize)是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内
【剑指offer】28.在二叉树中找到两个节点的最近公共祖先
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 数据范围:树上节点数满足 1≤n≤10^5 , 节点值val满足区间 [0,n) 要求:时间复杂度 O(n) 注:本题保证二叉树中每
【剑指offer】27.二叉树中和为某一值的路径(三)
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。 1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点 2.总节点数目为n 3.保证最后返回的路径个数在整形范围内(即路径个
【剑指offer】26.把二叉树打印成多行
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。 例如: 给定的二叉树是{1,2,3,#,#,4,5} 该二叉树多行打印层序遍历的结果是 [ [1], [2