
算法思想
文章平均质量分 69
一些经典题目使用的算法设计思想,以及深入思考
ly_1115
随遇而安,没必要逞强。
展开
-
【牛客网】跳台阶 and 变态跳台阶
1. 跳台阶题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种方法?解题思路这种问题一般是有规律的,跳1级台阶,只有1种方法;跳2级台阶,有2种方法;跳3级台阶,有3种方法;跳4级台阶,有5种方法,依次下去…跳一个n级的台阶的方法数是跳n - 1级台阶的方法数与跳n - 2阶台阶的方法数的总和。这种思路可以用逆推去想,要跳上一个n级台阶,可以从...原创 2019-07-01 21:28:02 · 149 阅读 · 0 评论 -
【Linux】模拟实现加载的进度条
没学过Linux 的小伙伴也可以学会的神操作!!下面我会一步一步的仔细讲解,一起来看 ~首先可以通过我之前的博客 :[Linux的基本指令](https://blog.youkuaiyun.com/ly_6699/article/details/88379710)学习一下基本命令然后了解[权限管理和常用工具](https://blog.youkuaiyun.com/ly_6699/article/details/88380366)有兴趣的可以继续查看 [vim编译器的命令集](https://blog.youkuaiyun.com/原创 2019-05-14 00:16:40 · 370 阅读 · 1 评论 -
将字符串占位符替换为参数列表中的元素
题目描述:将字符串A中的占位符"%s"替换为参数列表arg中的元素,参数列表中元素多的追加到字符串的后面,保证参数列表中的元素个数大于等于字符串中的占位符个数。示例输入:“A%sC%s”{‘B’,‘D’,‘E’}输出 : “ABCDE"参考代码 public static String formatString(String A, int n, char...原创 2019-05-02 17:23:45 · 1791 阅读 · 3 评论 -
【C++】map统计元素个数并且排序,用三种方法实现
我在上篇博客中讲到,map的主要特点是 会将所有键值对按key 值升序排列 且map中的key值不允许重复, 想了解关于map 和multimap 更多知识的可以查看下面的这篇博客:STL进阶之树形的关联式容器——map下面我们就应用map的三种接口实现和map有关的排序1. find(key) + iterator insert(iterator position,make_pair())...原创 2019-04-17 23:17:55 · 5109 阅读 · 3 评论 -
【LeetCode --2】两数相加 [C++]
题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。这里假设除了数字 0 之外,这两个数都不会以 0 开头。示例输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8...原创 2019-04-10 14:16:05 · 649 阅读 · 0 评论 -
【C++】实现一个不能被继承的类
在我的上篇博客里,我讲到继承中的作用域和派生类的默认成员函数,并留下一个问题:怎样实现一个不能被继承的类!这道题的解题思路有两个:1.在C++98 里,我们可以将构造函数私有化,这样派生类无法调用基类的构造函数,便无法继承。具体代码如下:class NonInherit{public://这个函数保证对象在类外可以被访问,但无法被继承 static NonInherit GetIn...原创 2019-03-25 20:29:58 · 211 阅读 · 0 评论 -
【C++】类创建对象的情况
最近经常在选择题里碰到问:下面程序的类中创建了几个对象的问题,开始做题很头疼,后来稍微总结了一下,发现也并不难。这可能只是一部分,之后有其他类型还会继续更新~或者大家碰到的其他问题,也可以留言给我,一起讨论咯首先,大家都知道构造函数和拷贝构造函数会为类创建对象。1.构造函数很好辨认,类名 对象名;即可创建对象。对构造函数有其他疑惑的宝宝可以参考前面的博客:https://blog.csdn...原创 2019-03-24 23:01:28 · 1152 阅读 · 0 评论 -
【LeetCode】 电话号码的字母组合 [C++]
题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。已知数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].解题思路:1.若输入的字符串为空则直接返回。if(index==digits.size()) ...原创 2019-03-16 20:37:58 · 1324 阅读 · 0 评论 -
【C++】类与结构体的区别
我们知道C++中的 struct 对C中的 struct 进行了扩充,它不再是只能用来封装不同类型数据的数据结构了,而是拥有了更多的功能,例如:**可以包含成员函数,可以继承,可以实现多态!!**,这些功能与C++中的类很相似。那么接下来我们解剖一下C++中结构体struct与类class的区别。**struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体!**原创 2019-03-12 23:38:09 · 32420 阅读 · 8 评论 -
【C++】深浅拷贝的认识
[本节内容]浅拷贝与深拷贝的比较1.拷贝拷贝就是我们平时说的复制,就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般我们在以下三种情况下会用到对象的复制:1.拷贝构造函数:用一个已有的对象去创建同类的新对象并对它初始化2.对象作为函数的参数进行调用,这时调用此函数时使用的是值传递,也会产生对象的复制3.函数的返回值是类的对象,在函数调用结束时,需要将函数中的对象复制...原创 2019-03-01 19:25:01 · 316 阅读 · 0 评论 -
【数据结构】排序算法之 快速排序
1. hoare的直接排序:基值不用单独记录,[begin+1,end] 是需要操作的内容,基值只在最后交换一次。2. 挖坑法:基值需要单独变量记录否则会被覆盖,[begin,end] 是操作的内容,多一个变量所以有“坑”。3. 前后指针法:基值无需单独记录,[begin+1,end] 是需要操作的内容,基值只在最后交换一次。这里两个指针走向相同,cur一定会遍历整个数组(左右指针的方式除非已排序,否则不会遍历全数组)原创 2019-02-23 23:39:44 · 506 阅读 · 0 评论 -
【数据结构】八种排序算法思想(完整代码)
完成功能插入排序1.直接插入排序:默认第一个数是有序数列,将后面的数依次经过比较插入正确的位置2.希尔排序:设置gap值,先将间隔gap的值进行插入排序,再设置几个gap插入排序,最后gap=1时,即排序完成。选择排序3.直接选择排序:i>每次从待排数据中选择最小的数,若它不是第一个位置的值则与第一个位置的值进行交换,将剩下n-1个值继续操作,直到待排数据全部排完。ii&g...原创 2019-02-23 17:29:55 · 1941 阅读 · 0 评论 -
【C语言】在杨氏矩阵中查找一个数(完整代码)
//数组://1 2 3//2 3 4//3 4 5#define _CRT_SECURE_NO_WARNINGS 1#include <stdlib.h>#include <stdio.h>int search(int arr[3][3], int row, int col, int k, int px, intpy){int i = 0;int原创 2018-11-11 20:06:38 · 312 阅读 · 0 评论 -
【C语言】位运算的应用:只出现一次的数(完整代码)
#define _CRT_SECURE_NO_WARNINGS 1#include <stdlib.h>#include <stdio.h>#define N 9 //数据中只有一个数字出现了一次,其他所有数字都是成对出现的int main(){int i = 0;int a[N] = { 0 };int ret = 0;printf(“请输入%d个数据...原创 2018-11-10 16:56:31 · 274 阅读 · 0 评论 -
【牛客网】组队竞赛
题目描述牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一 共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是...原创 2019-05-22 17:20:44 · 1493 阅读 · 0 评论 -
【牛客网】删除公共字符
题目描述输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”输入描述: 每个测试输入包含2个字符串输出描述: 输出删除后的字符串示例输入: They are students. aeiou输出: Thy r stdnts.解题思路思路一 :暴力...原创 2019-05-24 16:04:59 · 289 阅读 · 0 评论 -
【牛客网】统计每个月兔子的总数
题目描述有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔 子都不死,问每个月的兔子总数为多少?输入描述: 输入int型表示month输出描述: 输出兔子总数int型示例输入 9输出 34解题思路第n个月的兔子数量由两部分组成,一部分是上个月的兔子f(n-1),另一部是满足3个月大的兔子,会生一只兔子f(n2)。所以第n个月兔子总数...原创 2019-06-29 23:49:43 · 829 阅读 · 0 评论 -
【牛客网】不要二
题目描述二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一 块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根,小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述: 每组数组包含网格长宽...原创 2019-06-29 23:35:38 · 277 阅读 · 4 评论 -
【牛客网】把字符串转换成整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例输入+21474836471a33输出214748...原创 2019-06-04 21:28:39 · 171 阅读 · 0 评论 -
【牛客网】井字棋
题目描述对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代 表是对方玩家的棋子。测试样例:[[1,0,1],[1,-1,-1],[1,-1,0]]返回:true解题思路井字棋有四种情况表示当前玩家获胜,1代表当前玩家棋子 1. 行全为1, 即行的和为3 2. 列...原创 2019-06-02 18:51:26 · 443 阅读 · 0 评论 -
【牛客网】最小公倍数
在上篇博客里,我讲到:求最大公约数 的方法大全 :https://blog.youkuaiyun.com/ly_6699/article/details/90719315题目描述正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小 公倍数。输入描述: 输入两个正整数A和B。输出描述: 输出A和B的最小公倍数。示例输入: 5 7输出: 35解...原创 2019-06-02 18:19:31 · 949 阅读 · 0 评论 -
【C++】求两个数的最大公约数——方法大全
最大公约数定义如下:公约数,也被称为“公因数”。它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”,公约数中最大的整数即为“最大公约数”。以下我将介绍8种求最大公约数的方法,这些方法中,最常用到的公约数求法的思想我已用代码实现了,并附有运行结果的分析,小伙伴看完就再也不用怕最大公约数和最小公倍数的题了!!原创 2019-06-02 17:53:43 · 36308 阅读 · 3 评论 -
【牛客网】合法括号序列判断
以下记录了牛客网上 的一道题 *(根据输入的字符串,判断是否为一个合法的括号串)* 。这里主要用于分享和总结自己的解题思路,欢迎大家一起参与讨论,一起进步~## 原题目描述对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。输入描述:输入一串字符,包含'(' 和 ')'及其他字符。输出描述:返回true或false。原创 2019-05-29 00:35:31 · 927 阅读 · 0 评论 -
【牛客网】连续最大和
题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述: 输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个 整数都在32位int范围内。以空格分隔。输出描述: 所有连续子数组中和最大的值。示例输入: 3 -1 2 1输出: 3...原创 2019-05-27 17:35:56 · 278 阅读 · 0 评论 -
【牛客网】:统计回文
题目描述“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有 对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符 串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新 串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:A =...原创 2019-05-26 22:21:34 · 286 阅读 · 0 评论 -
【牛客网】进制转换
题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述: 输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述: 为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10 用A表示,等等)示例:输入: 7 2输出: 111解题思路本题思路很简单,首先想清楚原理:N进制数,每个进...原创 2019-05-25 17:29:16 · 376 阅读 · 0 评论 -
【牛客网】计算糖果
题目描述A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道 以下的信息: A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数. 现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所 有题设条件。输入描述: 输入为一行,一共4个整数,分别为...原创 2019-05-25 17:19:23 · 274 阅读 · 0 评论 -
【牛客网】倒置字符串
题目描述将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割示例输入: I like beijing.输出: beijing. like I解题思路及完整代码思路...原创 2019-05-25 01:03:55 · 477 阅读 · 0 评论 -
【牛客网】排序子序列
题目描述牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一 个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数 组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出 2输入描述: 输入的第一行为一个正整数n(1...原创 2019-05-25 01:03:30 · 399 阅读 · 0 评论 -
【C语言】有序数组的折半查找(完整代码)
在数组中找到某个值,我们首先想到的方法可能是直接顺序遍历,这是最简单的方法,但是效率不一定高。如果当前给定数组是乱序的,我们只能通过挨着遍历的方法查找某个数。但当前数组是一个有序数组,我们是否有效率更高的方法呢?这就要介绍一下“折半查找”:先通过计算数组的元素个数,找到数组的中间位置。然后将目标数字与数组的中间元素进行比较,若目标数字比它小则在它的左部分按折半查找继续,若目标数字比它大则在它的右部分按折半查找继续,直至到结果,输出位置或者-1。原创 2018-11-07 22:02:18 · 6418 阅读 · 0 评论