Acwing
文章平均质量分 60
_starstarli
这个作者很懒,什么都没留下…
展开
-
奇怪的汉诺塔
奇怪的汉诺塔汉诺塔问题,条件如下:1、这里有A、B、C和D四座塔。2、这里有n个圆盘,n的数量是恒定的。3、每个圆盘的尺寸都不相同。4、所有的圆盘在开始时都堆叠在塔A上,且圆盘尺寸从塔顶到塔底逐渐增大。5、我们需要将所有的圆盘都从塔A转移到塔D上。6、每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。请你求出将所有圆盘从塔A移动到塔D,所需的最小移动次数是多少。汉诺塔塔参考模型输入格式没有输入输出格式对于每一个整数n(1≤n≤121≤n≤12原创 2021-02-18 21:06:05 · 218 阅读 · 0 评论 -
acwing-19
acwing-19a^b(简单)求 aa 的 bb 次方对 pp 取模的值。输入格式三个整数 a,b,pa,b,p ,在同一行用空格隔开。输出格式输出一个整数,表示a^b mod p的值。数据范围0≤a,b≤10^9 0≤a,b≤10^91≤p≤10^9 1≤p≤10^9输入样例:3 2 7输出样例:2快速幂#include <iostream>using namespace std;int main(){ long long int a,b,p原创 2021-02-18 20:24:47 · 90 阅读 · 0 评论 -
acwing-18
acwing-18构建乘积数组(中等)给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其中B中的元素B[i]=A[0]×A[1]×… ×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。样例输入:[1, 2, 3, 4, 5]输出:[120, 60, 40, 30, 24]思考题:能不能只使用常数空间?(除了输出的数组之外)题解将结果分为两个部分一个是0 — i-1 一部分是i+1 — n-1所以这里设置两个数组,一个数组原创 2021-02-17 13:14:12 · 83 阅读 · 0 评论 -
acwing-17
acwing-17股票的最大利润(简单)假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖 一次 该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14]输出:11枚举可能会卖出的天数,假设第n天卖出,这样需要在前n天找一个最买入最小的一天,这样算法是O(n^2)我们在枚举卖原创 2021-02-15 22:04:49 · 68 阅读 · 0 评论 -
acwing-16
acwing-16骰子的点数(简单)将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷法。所以输出[1, 1, 1, 1, 1, 1]。样例2输入:n=2输出:[1, 2, 3, 4, 5, 6, 5,原创 2021-02-15 00:29:45 · 141 阅读 · 0 评论 -
acwing-15
acwing-15翻转单词顺序(中等)输入一个英文句子,单词之前用一个空格隔开,且句首和句尾没有多余空格。翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。样例输入:"I am a student."输出:"student. a am I"第一种方法,是将字符串中的单词找出来放在临时的数组中,再将这个数组进行字符串的整合class Solution {p原创 2021-02-12 22:05:25 · 419 阅读 · 0 评论 -
acwing-14
acwing-14数组中唯一只出现一次的数字(困难)在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。你可以假设满足条件的数字一定存在。思考题:如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?样例输入:[1,1,1,2,2,2,3,4,4,4]输出:3因为每个数字都只出现三次,所以倘若我们通过计算元素(以二进制表示)中每一位出现1的个数,通过模3取余得出的就是只出现一次的元素(以二进制表示)中对应位上的值,这样我们便原创 2021-02-10 23:51:31 · 85 阅读 · 0 评论 -
acwing-13
acwing-13二叉树的深度(简单)输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。样例输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 12 2 / \ 6 4输出:3采用深搜的思想,在遍历二叉树的同时,对当前节点的深度进行计算获取深度的最大值/** * Defin原创 2021-02-10 00:02:56 · 70 阅读 · 0 评论 -
acwing-12
acwing-120到n-1中缺失的数字(简单)一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。样例输入:[0,1,2,4]输出:3该数组具有nums[i]=i的特点采用二分法,将其中不满足nums[i]=i的点的第一个位置查找出来特判是数组最后一个缺失,还是数组中的某一个数缺失class Solution {public: int getMissingN原创 2021-02-07 23:43:52 · 139 阅读 · 0 评论 -
acwing-11
acwing-11数组中的逆序对(困难)在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。样例输入:[1,2,3,4,5,6,0]输出:6暴历的解法class Solution {public: int inversePairs(vector<int>& nums) { int cnt=0; for(int i=0;i<nums.size();i原创 2021-02-06 22:32:36 · 77 阅读 · 0 评论 -
acwing-10
acwing-10丑数(中等)我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。求第n个丑数的值。样例输入:5输出:5注意:习惯上我们把1当做第一个丑数。因为我们是要求一个丑数,该数只包含2 3 5 三个质因子,那么我们只要用这三个数进行反复的计算,加入到结果集中比如一开始的丑数是1,那么下一个丑数是这1×2或者1×3或者1×5中最小的那个是2,将它添加到丑数集合中接下来的丑数判断应该是2×2或者1×3或者1×原创 2021-02-05 21:36:12 · 82 阅读 · 0 评论 -
acwing-07
acwing-07最小的k个数(简单)输入n个整数,找出其中最小的k个数。注意:数据保证k一定小于等于输入数组的长度;输出数组内元素请按从小到大顺序排序;样例输入:[1,2,3,4,5,6,7,8] , k=4输出:[1,2,3,4]对元素进行排序,获取k个元素即可采用**sort()**函数排序class Solution {public: vector<int> getLeastNumbers_Solution(vector<int>原创 2021-02-04 22:22:17 · 78 阅读 · 0 评论 -
acwing-09
acwing-09把数字翻译成字符串(中等)给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。样例输入:"12258"输出:5采用动态规划的思想考虑问题设置dp数组,dp[i]表示前i位数字有多少不同的翻译方式初原创 2021-02-04 22:20:41 · 81 阅读 · 0 评论 -
acwing-08
acwing-08从1到n整数中1出现的次数(困难)输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。样例输入: 12输出: 5直接暴力计算1-n个数,计算1的个数是会超时的这里采用遍历n的位数来计算1的个数例如n=123456假设当前遍历遍历到百位数4那么我们首先可以确定**_ _ _ 4 _ _中千位数,万位数,十万位数的取值范围是000-123**因为我原创 2021-02-03 22:05:40 · 93 阅读 · 0 评论 -
acwing-06
acwing-05二叉搜索树与双向链表(中等)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。注意:需要返回双向链表最左侧的节点。例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。题解二叉排序树的中序遍历的结果是升序的在进行二叉排序树的中序遍历的过程中,采用双向链表的指针的修改手段因为该结点的左子树指针已经是递归结束后的,所以修改左子树指针是不会有问题的/** * Definition for a原创 2021-01-31 22:08:59 · 72 阅读 · 0 评论 -
acwing-05
acwing-05二叉搜索树的后序遍历序列(简单)输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true二叉搜索树的特点就是,左子树的所有结点值都小于根节点,右子树的所有结点值都大于根节点后序遍历,根节点位于一棵树的最后一个值。class Solution {public: bool verifySeque原创 2021-01-31 22:04:14 · 72 阅读 · 0 评论 -
acwing-04
acwing-04不分行从上往下打印二叉树(简单)从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。样例输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4输出:[8, 12, 2, 6, 4]即为二叉树的层次遍历利用队列,将其逐个放入队列,每次从队列中取元素放入结果中class Solution {publ原创 2021-01-31 22:03:36 · 74 阅读 · 0 评论 -
acwing-03
acwing-03对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。样例如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树: 1 / \ 2 2 / \ / \3 4 4 3如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树: 1 /原创 2021-01-31 22:02:53 · 61 阅读 · 0 评论 -
acwing-02
acwing-02合并两个排序的链表(简单)输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5设置哨兵指向头结点小的链表作为主链表遍历另一条链表,找到正确的位置将链表结点一个一个插到主链表中/** * Definition for singly-linked list. * struct ListNode { *原创 2021-01-31 22:01:54 · 57 阅读 · 0 评论 -
acwing-01
acwing-01翻转链表(简单)定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:请同时实现迭代版本和递归版本。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL题解:迭代版本利用三个指针:p作为活动指针用于遍历链表pre用于指向活动指针的前一个结点cur用于获取活动指针的下一个结点反转后继结点指针实现反转链表的功能/** *原创 2021-01-31 22:09:27 · 74 阅读 · 0 评论