
算法习题
Track48
zhengzhaozuo
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
即计算 x 的 n 次幂函数
50. Pow(x, n) 难度中等608 实现pow(x,n),即计算 x 的 n 次幂函数(即,xn)。 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示例 3: 输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25 提示: -100.0 <x< 100.0 -231<=...原创 2021-03-17 09:39:19 · 1343 阅读 · 1 评论 -
栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3)原创 2021-03-11 14:00:56 · 113 阅读 · 0 评论 -
二叉树的层次排序
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3,9,20,15,7] 解题: 使用队列可以解决 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;...原创 2021-03-11 10:13:48 · 792 阅读 · 0 评论 -
电话号码的字母组合--递归
坑!Python 列表注意append和+的区别 1、list与字符串相加: list+=“abc” 结果是list==['a','b','c'] 而如果用append的话,就是list.append("abc"),结果是["abc"] 2、list与list相加: list+list的结果是直接拼接 list.append()的结果是将参数作为一个整体加到list中: !!注意append() sort() reverse()都是直接作用在变量上,没有返回值 >>>..原创 2020-11-23 12:55:25 · 383 阅读 · 0 评论 -
最接近的三数之和--双指针
纪念2020第一次完美的A! 坑: 1、Python的sort是直接作用在列表上,没有返回值 题目: 给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 提示: 3 <= nums.le...原创 2020-11-22 23:39:17 · 135 阅读 · 0 评论 -
巨人排队
我的算法写的好辛苦: 题目描述 巨人国的小学生放假了,老师要给小朋友们排队了。可是这个老师有强迫症,一定要路队上的小朋友按照身高从高到矮排序(也就是排在前面的不能比后面的矮)。小朋友呢也很调皮,一旦老师给他排好队就不愿意动了。这个时候小朋友们一个一个的从教室里出来了,每个小朋友一出来老师就要给小朋友安排好位置。请问老师最少要给小朋友排几条路队呢? 输入 对于每组数据,第一行两个数n,表示小...原创 2019-06-06 20:34:32 · 363 阅读 · 0 评论 -
验证二叉搜索树
这是一个中等题,但是难度很低 虽然知道二叉搜索树,但是写代码时,就忘了概念 最初写的(错误) 输入:[10,5,15,null,null,6,20] 输出:true 预期:false 题目: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也...原创 2019-06-12 16:41:01 · 380 阅读 · 0 评论 -
整数转罗马数字
这道题我哭了,不是难,终于学会了罗马数字 罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗...原创 2019-05-28 19:27:29 · 150 阅读 · 0 评论 -
盛最多水的容器(双指针,短的向中间移)
这道题有些面善,大二的时候去参加字节跳动的笔试,有一道算法题就是这个,我当时可能写的是穷举 我自己写的是穷举,时间复杂度是O(n^2) class Solution { public: int maxArea(vector<int>& height) { int max=0; int c; for(int ...原创 2019-05-28 19:04:14 · 229 阅读 · 0 评论 -
整数反转(整数溢出判断)
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 ...原创 2019-05-28 14:05:20 · 3220 阅读 · 0 评论 -
Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的...原创 2019-05-28 13:32:45 · 216 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 /*对vector容器内的数据进行排序,按照 将a和b转为string后 若 a+b<b+a a排在在前 的规则排序, 如 2 21 因为 212 < 221 所以 排序后为 21 2 ...原创 2019-05-12 23:38:31 · 115 阅读 · 0 评论 -
最大交换
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 思路:将数字转化为数组之后,降序排序,寻找到第一个与原数组位置相同值不一样的数,然后将降序后的数组该位置值在原数组寻找,将其与原数组该位置的值进行swap,即可答案。 重点:搜索值的时候应该从原数组的后面向前扫描,否则会出错,实例1...原创 2019-05-21 02:26:56 · 648 阅读 · 0 评论 -
回文子串个数| 最长回文串
第一题 回文串个数 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例 1: 输入: "abc" 输出: 3 解释: 三个回文子串: "a", "b", "c". 示例 2: 输入: "aaa" 输出: 6 说明: 6个回文子串: "a", "a", "a", "aa", "aa",...原创 2019-05-20 23:32:22 · 899 阅读 · 0 评论 -
C++ accumulate
不要忘了加#include<numeric> 1.累加求和 int sum = accumulate(vec.begin() , vec.end() , a); a是初值,accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。 2.字符串连接 可以使用accumulate把string型的vector容器中的元素连接起来: ...原创 2019-06-12 16:47:30 · 1004 阅读 · 0 评论 -
C++中的各种进制转换函数汇总
原 C++中的各种进制转换函数汇总 置顶 2018年06月10日 22:09:10 小·幸·运 阅读数:93...转载 2019-06-12 16:55:27 · 2282 阅读 · 0 评论 -
机器人走迷宫
有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱。他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走。当机器人不能走的时候,也就是下一步会遇到陷阱、迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会)。请问这个机器人最多可以经过多少个方格。 输入 对于每组数据,第一行两个数w和h,表示迷宫的行...原创 2019-06-06 10:33:18 · 2954 阅读 · 0 评论 -
a+b问题
题目描述 读入两个小于100的正整数A和B,计算A+B,注意: A+B的每一位由对应的英文字母给出。 输入 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为zero时输入结束,相应的结果不要输出. 输出 对每个测试用例输出1行,即A+B的值. 样例输入 one + two = three four + five si...原创 2019-06-05 00:33:20 · 627 阅读 · 0 评论 -
1006: 平方和与立方和(强制转化long long)
题目描述 给定一段n与m之间连续的整数(包括n和m),求出他们中所有偶数的平方和以及所有奇数的立方和。 输入 输入数据包含多组测试实例,每组测试实例包含一行,两个整数m和n(0 <= n<= 10000,0 <= m <= 10000) 输出 对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇...原创 2019-06-15 08:24:53 · 496 阅读 · 0 评论 -
惠民工程(最小生成树)
惠民工程 Description 市政府“惠民工程”的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出居民点数目M ( <...原创 2019-06-15 08:01:16 · 377 阅读 · 0 评论 -
矩阵面积
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。 每个矩形由其左下顶点和右上顶点坐标表示,如图所示。 示例: 输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45 思路,重叠部分宽要么为0,要么是(最靠左的右边)与(最靠右的左边)相减,同理,高也是 由于相减时出现整数溢出,相减前需要转化为long类型 class Solution { ...原创 2019-06-01 20:27:33 · 2167 阅读 · 0 评论 -
最大整除子集——动态规划与数学原理结合
给出一个由无重复的正整数组成的集合, 找出其中最大的整除子集, 子集中任意一对 (Si, Sj) 都要满足: Si% Sj= 0 或 Sj% Si= 0。 如果有多个目标子集,返回其中任何一个均可。 示例 1: 集合: [1,2,3] 结果: [1,2] (当然, [1,3] 也正确) 直觉告诉我先排个序是很稳的,但是一般动态规划都是计算什么解的长度,解的最大最小值之类的,突然要...原创 2019-06-01 20:02:09 · 493 阅读 · 0 评论 -
山脉数组
给定一个整数数组A,如果它是有效的山脉数组就返回true,否则返回 false。 让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length >= 3 在0 < i< A.length - 1条件下,存在i使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ....原创 2019-06-06 21:20:39 · 840 阅读 · 0 评论 -
最长上升子序列 (LIS)
最长上升子序列(LongestIncreasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序列 b i,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们也可以从中得到一些上升的子序列(ai1, ai2, …, aiK),...转载 2019-06-06 20:51:52 · 943 阅读 · 0 评论 -
upper_bound()与low_bound() 及其返回值问题
前提:一个非降序列!!!!!! #include "algorithm" upper_bound() 与 lower _bound()都是 < algorithm > 的一个二分插画早函数 比较高效(log的时间复杂度)并且 方便 语法格式lower_bound(数组首地址,数组尾地址,待查元素的值) 由于函数返回的值是 迭代器(似乎是???)所以还要减去数组首地址才是那个值的...转载 2019-06-06 13:38:02 · 853 阅读 · 0 评论 -
求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径1->2->3代表数字123。 计算从根到叶子节点生成的所有数字之和。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 25 还蛮简单的,就是递归调用 /*...原创 2019-05-19 23:34:08 · 360 阅读 · 0 评论 -
最小栈问题
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 这道题之前看过漫画,竟然一次运行成功,也是神奇。 注意!!!当前最小值不入最小栈 class Solution { public: stack <int> a; stack <int> min_stack; int min_num; ...原创 2019-04-25 22:11:03 · 446 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 注意!!!:第三个和第四个for循环前面判断的条件: 原因,有可能第三个循环的和第一个循环的一样,所以要加个if判断 ...原创 2019-04-25 21:50:09 · 111 阅读 · 0 评论 -
二进制的1
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 我写的是第一种思路:但是忘了加flag=flag<<1 第二种思路不是很懂 链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8 来源:牛客网 //---------------正解-----------...原创 2019-04-01 23:40:59 · 311 阅读 · 0 评论 -
递归
递归最重要的两个概念: 逻辑边界 递归式 1、N的阶乘 逻辑边界:F(0)=1 递归式:F(x)=x*F(x-1) #include <stdio.h> #include <string.h> int F(int x){ if (x==0) return 1; return (x*F(x-1)); } int main()...原创 2019-03-13 17:13:30 · 158 阅读 · 0 评论 -
斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 题目不能直接用递归,可能是因为循环递归调用,时间复杂度太高,且栈也很高 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 这个也是斐波那契数列问题。青蛙跳八级==跳六级+跳七级 方...原创 2019-03-25 15:46:50 · 153 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 push是直接push堆栈的顶元素 pop是先将堆栈A弹到另一个栈B,然后将B的元素弹出,再将其他元素压入A queue和stack千万注意: 1、for循环当中条件判断中有.size(),因为在pop\push之后会size会动态变化 最好是使用while(!stack1.empty())...原创 2019-03-25 15:10:50 · 128 阅读 · 0 评论 -
散列(hashtable)
散列作为常用 的数据结构,之前上课的时候书上没有太多的篇章有讲,因此专门复习一下 1、空间换时间 先看一个简单的问题:给出N个正整数,再给出M个正整数,求问这M个整数的每一个是否有在N中出现,其中N,M<10^5; 对于这类问题,最直观的就是对于每个M,遍历N,但是复杂度达到了O(N*M),显然复杂度过大 那么给出的解决方案就是以空间换取时间,即设定一个bool型数组boolTabl...原创 2019-03-13 00:31:48 · 218 阅读 · 0 评论 -
STL入门学习与STL总结--更新中
从大一下学习C++,老师就说STL是C++精华,“C语言的指针,C++的STL”,结果一直都没什么时间专门去学STL,结果现在到了大三下为了保研夏令营,要开始学习STL咯; 目录 1、STL介绍 2、STL容器--vector 1、vector的定义: 2、vector访问 3、vector实例解析 4、vector的常见用途 2、STL容器 --set 1、set定义 ...原创 2019-03-15 19:30:58 · 1255 阅读 · 0 评论 -
数学问题--算法
1、神奇的数字-6174 就是给定一个四位数,最大的全排列减去最小的全排列的结果反复运算,终会到达6174 思路是:给定一个四位的整形数组,使用algorithm的sort进行从大到小排列,然后通过两个函数进行最大(小)排列运算; 然后将结果也带入运算。 这道题难度低。 #include <algorithm> #include <iostream> usi...原创 2019-03-19 14:59:05 · 302 阅读 · 0 评论 -
我和柯南拿石头
题目描述: 最近阿笠博士发明了一种新的游戏,他邀请步美(ayumi)和柯南(conan)来玩。 游戏的规则是这样的。有一堆石子,石子的总数是n(0< n< =30)个。步美和柯南轮流从这堆石子中拿走m*m个石子(m必须是一个正整数)。假如在轮到某个人取石子的时候,这个人没有石子可以取(也就是石子已经被另一个人在上次取光了),则这个人就是失败者。 两个人开始玩游戏,每次都是步美先取,...原创 2019-03-03 21:24:24 · 330 阅读 · 0 评论 -
做OJ时/C/C++语法
1、scanf()的输出为成功读取多少个数 2、cin/cout浪费大量时间,超时可转化为printf scanf 3、同一个程序,不要既使用了printf 又用了cout,可能会出错 4、超过就使用long long ,别忘了LL long lomng bigcnum=12345678912346LL; 5、ASCII 48 65 97 6、C++的cin cout的头文件是<...原创 2019-03-03 19:01:21 · 544 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路: 借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,...原创 2019-04-26 14:34:15 · 154 阅读 · 0 评论 -
层次打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { ...原创 2019-04-26 14:50:52 · 654 阅读 · 0 评论 -
最大连续子数组
题目:给一个数组,返回它的最大连续子序列的和(子向量的长度至少是1) 例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。 使用动态规划 F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变 F(i)=max(F(i-1)+array[i] , array[i]) res:所有子数组的和的最大值 re...原创 2019-05-09 18:20:17 · 272 阅读 · 0 评论