![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思路较好
IT远征军
这个作者很懒,什么都没留下…
展开
-
和为S的两个数
时间限制:1秒 空间限制:32768K 热度指数:101082 算法知识视频讲解题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。思路:两个数离的越远并且满足条件,此时输出的结果是我们所需的。C++实现:class Solution {public: ...原创 2018-05-03 16:54:06 · 589 阅读 · 0 评论 -
**《剑指offer》39:平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 平衡二叉树:平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 C++实现:class Solution {public: ...原创 2018-07-24 09:50:53 · 143 阅读 · 0 评论 -
***《剑指offer》27:字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。C++实现:class Solution {public: vector<string> P...原创 2018-07-24 11:14:14 · 116 阅读 · 0 评论 -
*《剑指offer》19:顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.C++实现:使用left, right, top, bottom分别表示打印一圈的最左边、最右边、最上边和最下边,并且right =...原创 2018-07-07 22:08:48 · 123 阅读 · 0 评论 -
**《保留最大的数》
题目描述给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。输入描述:输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。输出描述:输出保留下来的结果。示例1输入复制325 1...原创 2018-07-28 20:22:00 · 179 阅读 · 0 评论 -
**《彩色宝石项链》
题目描述有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石。输入...原创 2018-07-27 10:57:06 · 257 阅读 · 0 评论 -
回溯法:《8皇后问题》-python实现
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 思路:一行一行的放置皇后,判断皇后的位置是否符合条件,当放置到最后一行时,则所有皇后的位置放置完毕,保存棋盘活棋盘数加一。 #coding:utf-8import copyc = 0def not...原创 2018-08-10 10:17:10 · 1879 阅读 · 0 评论 -
回溯法:《装载问题》-python实现
有一批共n个集装箱要装上2艘载重量分别为c1和c2的船,其中集装箱i的重量为wi,且。装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘船。如果有,找出一种装载方案。例如当n=3,c1=c2=50且w=[10,40,40]时,则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w=[20,40,40],则无法将这3个集装箱都装上轮船。容易证明,如果一个给定装载问题...原创 2018-08-10 10:28:44 · 3728 阅读 · 2 评论 -
回溯法:《圆排列问题》-python实现
给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3个圆的半径分别为1,1,2时,这3个圆的最小长度的圆排列如图所示。其最小长度为。 #coding:utf-8import sysimport mathimport copycc = []...原创 2018-08-10 10:30:06 · 1674 阅读 · 0 评论 -
回溯法:《数字和为sum的方法数》-python实现
题目描述给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。输入描述:输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A[i](32位整数),以空格隔开。输出描述:输出所求的方案数示例1...原创 2018-08-10 14:37:42 · 687 阅读 · 0 评论 -
动态规划:《走金子塔》-python实现
给定一个由n行数字组成的数字三角型,如图所示。设计一个算法,计算从三角形的顶至底的一条路径,使该路径经过的数字总和最大。路径上的每一步都只能往左下或右下走,给出这个最大和。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5这个问题来源于POJ1163。对于这种问题,我们可以有正向和反向两种思考方式。正向思考这个问题,d...原创 2018-08-14 18:07:58 · 825 阅读 · 0 评论 -
《字节跳动》笔试第二题
题目:输入:第一行输入一个数n,表示下边有几行。接下来输入n行,每一行格式为1,2;3,4;5,6......输出:将重叠部分进行合并的结果,按从小到大输出。例如: python实现:import sysif __name__ == '__main__': n = input() q = [] for i in range(n): ...原创 2018-08-12 15:28:40 · 3660 阅读 · 1 评论 -
《字节跳动》笔试第一题
题目描述:在[m,n]的矩阵中,用1表示有人,0表示没人。假如两个人的位置相邻(包括斜着相邻,水平相邻,垂直相邻),则他们是属于一个团体。输入:第一行输入两个数m,n,用,隔开接下来输入m行,每一行输入n个数,用逗号隔开输出:矩阵中有多少个团体,以及最大团体的人数。例如:输出6,11(程序没有管输出的格式,自己可以修改)import sysglobal r...原创 2018-08-12 16:26:35 · 4218 阅读 · 0 评论 -
**《连续最大和》
题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。示例1输入复制3...原创 2018-08-03 16:02:17 · 135 阅读 · 0 评论 -
动态规划:《背包问题》-python实现
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 分析一波,面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。 解决办法:声明一个 大小为 m[n][c] 的二维数组,m[ i ][ j ] 表示 在面对第...原创 2018-08-16 15:54:06 · 7827 阅读 · 1 评论 -
动态规划:《部分背包问题》-python实现
接上两篇部分背包问题:有n种重量和价值分别为Wi和Vi的物品。从这些物品中挑选出总重量不超过w的物品,第i种物品最多选mi个,求所有挑选方案中价值总和的最大值。将部分背包问题转换成01背包问题进行求解。import sysdef track(d, c, w): x = [] for i in range(1, len(w)): if d[i][c...原创 2018-08-17 10:37:19 · 2351 阅读 · 1 评论 -
京东笔试《相似字符串》
输入两个字符串S, T,假如S的子串与T串的格式相同,则认为相似。如:S:ababcb, T:xyx, 则S中aba,bab, bcb与T串相似,输出3.a = 'ababcb'b = 'xyx'def solve(S, T): if len(S) == 0: return 0 a = [] b = [] for i in range(...原创 2018-09-09 21:29:40 · 388 阅读 · 0 评论 -
头条笔试《团体个数》
输入一个整数m,表示输入矩阵的边长,接下来输入m行,每行m个数(0或1),每个数用空格分开。假设上下左右相邻,则认为是1个团体;如:1 11 1或111或1 1 1都是来自一个团体,最后输出一共有多少个团体。 import sysm = int(sys.stdin.readline())grid = []for _ in range(m): ...原创 2018-09-09 21:34:23 · 162 阅读 · 0 评论 -
**《剑指offer》66:机器人运动范围(回溯法)
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?C++实现:class Solut...原创 2018-07-23 21:05:00 · 455 阅读 · 0 评论 -
*《剑指offer》38:二叉树的深度(递归法实现)
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 C++实现:思路:递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), lef...原创 2018-07-17 21:08:04 · 124 阅读 · 0 评论 -
数串
题目描述设有n个正整数,将他们连接成一排,组成一个最大的多位整数。如:n=3时,3个整数13,312,343,连成的最大整数为34331213。如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。输入描述:有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。输出描述:每组数据输出一个表示最大的整...原创 2018-05-14 20:59:01 · 109 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5C++实现:/*...原创 2018-05-15 18:40:58 · 127 阅读 · 0 评论 -
二进制中1的个数
时间限制:1秒 空间限制:32768K 热度指数:218863 算法知识视频讲解题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。c++实现:class Solution {public: int NumberOf1(int n) { int count = 0; while(n!= 0) { ...原创 2018-05-22 21:12:48 · 187 阅读 · 0 评论 -
《剑指offer》4:重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:使用递归。前序遍历的第一个节点即为根节点,在中序遍历中,以前序遍历的第一个节点为分界线,左边的为左子树的节点,右边的为右子树的节点。使用递归,即可求解...原创 2018-06-04 21:21:30 · 233 阅读 · 0 评论 -
《剑指offer》5:用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:主要使用栈的各种函数进行操作,涉及函数empty(), top(), push(), pop(),用法可以参考https://blog.csdn.net/qq_20366761/article/details/70053813c++实现:class Solution{public: voi...原创 2018-06-04 21:50:17 · 148 阅读 · 0 评论 -
《剑指offer》14:链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。python实现:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def FindKthToTail(self, h...原创 2018-06-08 15:25:14 · 100 阅读 · 0 评论 -
*《剑指offer》20:包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。C++实现:思路:应用一个辅助栈,压的时候,如果A栈的压入比B栈压入大,B栈不压,,,,小于等于,AB栈同时压入,出栈,如果,AB栈顶元素不等,A出,B不出。class Solution { stack<int> A, B;public: void push(int value) {...原创 2018-07-08 10:38:27 · 88 阅读 · 0 评论 -
**《剑指offer》21:栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈...原创 2018-07-08 22:00:29 · 91 阅读 · 0 评论 -
**《剑指offer》22:从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。考点:宽度优先遍历C++实现:思路:定义一个队列,先将根节点放入,然后依次将根节点的左孩子和右孩子压入队列的末尾,然后弹出队列的队头,依次执行即可得到答案。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(i...原创 2018-07-10 11:12:09 · 112 阅读 · 0 评论 -
《剑指offer》16:合并两个排序的列表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。c++实现:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode*...原创 2018-07-03 17:07:16 · 123 阅读 · 0 评论 -
**《剑指offer》23:二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:左子树一定比右子树小,因此去掉根后,数字分为left,right两部分,right部分的最后一个数字是右子树的根他也比左子树所有值大,因此我们可以每次只看有子树是否符合条件即可,即使到达了左子树,左子树也可以看出由左右子树组成的树还想右子树那样处理...原创 2018-07-10 16:51:24 · 141 阅读 · 0 评论 -
**《剑指offer》32:把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。C++实现:class Solution {public: bool compare(int a, int b) { stringstream s1, s2; ...原创 2018-07-16 21:22:59 · 143 阅读 · 0 评论 -
**《剑指offer》33:丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。C++实现:class Solution {public: int GetUglyNumber_Solution(int index) { if(index < 7...原创 2018-07-17 09:43:29 · 120 阅读 · 0 评论 -
**《剑指offer》24:二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:递归实现C++实现:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; T...原创 2018-07-11 10:35:38 · 106 阅读 · 0 评论 -
《剑指offer》15:反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。C++实现:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* p...原创 2018-06-29 08:57:06 · 222 阅读 · 0 评论 -
*《剑指offer》34:第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1. 思路:可以利用哈希表进行求解。本人使用的是进行遍历的方式进行求解C++实现:class Solution {public: int FirstNotRepeatingChar(string str) { ...原创 2018-07-17 15:14:56 · 175 阅读 · 0 评论 -
*《剑指offer》36:两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。 思路:第一个公共的结点,意味着从该结点往后,两个列表的结点都相同。C++实现:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {pu...原创 2018-07-17 19:39:30 · 134 阅读 · 0 评论 -
leetcode754 到达终点数字---精妙的数学恒等式
原文链接:https://blog.csdn.net/weixin_37373020/article/details/80963488在一根无限长的数轴上,你站在0的位置。终点在target的位置。每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。返回到达终点需要的最小移动次数。示例 1:输入: target = 3输出: 2解释:第一次移动...转载 2018-09-14 09:11:22 · 491 阅读 · 0 评论