算法与数据结构
文章平均质量分 83
专栏主要是总结一些算法合数据结构,希望通过自己的总结能够更加牢固地掌握知识,也希望能够帮助到其他人。这些总结有些来自网络,首先对相关博主表示感谢!我转载的文章基本上都加以声明,如果未声明请联系本人。
木顶思上
发表是最好的记忆。
展开
-
数独算法及源代码
转载自数独算法及源代码。朋友手机装有数独游戏,开会报告等无聊的场合常拿来玩玩,游戏的算法似乎并不难,想想我也能做出来。今早闲的蛋疼,就写了个数独玩玩。记录如下:数独规则不知道的可以参考这里。游戏关键的算法就在于生成一个符合数独游戏规则的初始矩阵,首先想到的自然是号称万能解题法的“搜索+剪枝”了。1. 产生符合数独规则的初始矩阵第一行是随机生成转载 2016-12-05 11:04:19 · 9231 阅读 · 1 评论 -
LeetCode练习-难题卷
题目链接:LeetCode练习-难题卷。1、There are N children standing in a line. Each child is assigned a rating value.You are giving candies to these children subjected to the following requirements:Each child原创 2016-09-17 10:22:09 · 1376 阅读 · 0 评论 -
LeetCode练习-中等卷
题目链接:LeetCode练习-中等卷。1、Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.An example is the root-to-leaf path 1->2->3 which represents the number 1原创 2016-09-11 23:10:21 · 929 阅读 · 0 评论 -
LeetCode练习-简单卷
题目链接: LeetCode练习-简单卷。1、Given an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you imple原创 2016-09-10 22:30:19 · 669 阅读 · 0 评论 -
算法工程师能力评估
刚做了一套算法题(题目链接:算法工程师能力评估),总结一下。1、对于以下程序,递归算法x(x(8))需要调用几次函数x(int n)?class program { static void Main(string[] args) { int i; i = x(x(8)); } static int x(int n)原创 2016-09-04 20:16:39 · 6652 阅读 · 0 评论 -
斐波那契高效算法(4种算法综合分析)
斐波那契数列问题是算法学习者必然接触到的问题,作为经典问题,首次接触时一般是作为递归算法的案例教程。然而递归解决斐波那契,其效率低的令人发指,有人算出其时间复杂度为O(2^n)。指数级时间复杂度。如果面试的时候面试官问你斐波那契的求解方法,你来一个递归求解,基本上可以说,你已经game over了。那么有没有更高效的算法呢,本文将一一介绍。下面是斐波那契的4种解法:1.递归转载 2016-09-03 11:21:56 · 9442 阅读 · 0 评论 -
判断一个数组是否存在三个元素为某一定值
最近参加了一个公司的笔试,其中有一道题如下:给定一个array,判断是否存在3个元素的和为0?最开始看到这题没有细想特别优化的方法,居然直接采用了暴力搜索((⊙﹏⊙)b汗!),直接用了一个三层循环求解,代码如下:bool judge(int *arr,int n){ for(int i = 0;i<n-2;++i){ for(int j = i+1;j<n-1;++j){ fo原创 2016-09-03 10:09:55 · 3217 阅读 · 0 评论 -
面试题整理-斐波那契数列
这个很好。其实也就是f(0) = 0, f(1) = 1. 然后 f(n) = f(n-1) + f(n-2);测试链接点击打开链接。求解:#include #include long long a[71]; void init(void) { a[0] = 0; a[1] = a[2] = 1; for (int i = 3;转载 2016-09-02 22:52:52 · 1621 阅读 · 0 评论 -
面试常考算法题总结(二)
题目链接:试卷1和试卷2。题目1:对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。给定一个整数数组A及它的大小n,请返回最短子数组的长度。测试样例:[1,5,3,4,2,6,7],7返回:4分析:1.先判断依次最小值是否在正确位置,直到找到不在正确位置最小值的应该在的位置,作为最小需排序的起始点2.依次判断最大值是否在正确位置,直到找不到正确原创 2016-08-30 17:41:03 · 2670 阅读 · 4 评论 -
面试常考算法题总结(一)
题目链接:面试常考算法题(一)题目1:请把一张窄纸条竖着放在桌上,然后从纸条的下边向上对折,压出折痕后再展开。此时有1条折痕,突起的一面向指向纸条的背面,这条折痕叫做“下”折痕;突起的向指向纸条正面的折痕叫做“上”折痕。如果每次都从下边向上进行对折,对折N次。请从上到下计算出所有折痕的朝向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up"。原创 2016-08-29 23:09:40 · 4416 阅读 · 0 评论 -
字符串移位的解题技巧
题目链接:左旋转字符串汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!分析:初看到这题,感觉十分简单,写两个循环即可,先把后面的字符串提取出来,再原创 2016-08-28 22:43:03 · 4337 阅读 · 0 评论 -
剑指offer面试题——丑数
题目链接见:丑数题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析:首先的思路是暴力搜索方法,但是这样存在的问题就是效率太低,很容易超时。具体有两种实现方式:(1)先将一些丑数存储在一个容器中,再对容器进行排序,最后取出第N个丑数即可;原创 2016-08-25 22:53:01 · 673 阅读 · 0 评论 -
剑指offer面试题——把数组排成最小的数
题目链接:把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析:首先,思路就是进行一次排列,找出最小的数。但是这样数组个数比较多时会超时。具体代码如下:class Solution {public: vecto原创 2016-08-24 16:17:54 · 610 阅读 · 0 评论 -
集合的子集
题目链接:集合的子集题目描述请编写一个方法,返回某集合的所有非空子集。给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。测试样例:[123,456,789]返回:{[789,456,123],[789,456],[789,123],[789]原创 2016-08-23 23:08:00 · 1627 阅读 · 0 评论 -
翻转子串的解题技巧
题目链接:翻转子串假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hell原创 2016-08-20 14:51:28 · 1345 阅读 · 0 评论 -
动态规划:从新手到专家
出处:Dynamic Programming – From Novice to Advanced前言我们遇到的问题中,有很大一部分可以用动态规划(Dynamic Programming,简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对于其转载 2016-08-17 23:20:33 · 1238 阅读 · 0 评论 -
寻找Coder——去哪儿2015研发工程师笔试题
题目描述:(题目链接:寻找Coder)请设计一个高效算法,再给定的字符串数组中,找到包含"Coder"的字符串(不区分大小写),并将其作为一个新的数组返回。结果字符串的顺序按照"Coder"出现的次数递减排列,若两个串中"Coder"出现的次数相同,则保持他们在原数组中的位置关系。给定一个字符串数组A和它的大小n,请返回结果数组。保证原数组大小小于等于300,其中每个串原创 2016-08-14 22:43:06 · 954 阅读 · 0 评论 -
最后一个字符——奇虎360笔试题
题目描述:(题目链接:最后一个字符)正在挑战一个CrackMe的你,把需要填写的前面几位密码都正确猜出了,可是这最后一位密码,好像藏得有点深。CrackMe的作者还挑衅般的在里面藏了个.tar.gz文件,解压缩出来,里面写道你要的最后一个字符就在下面这个字符串里,这个字符是下面整个字符串中第一个只出现一次的字符。(比如,串是abaccdeff,那么正确字符就是b了) 然而下面给出来的字符串原创 2016-08-12 23:00:43 · 1373 阅读 · 0 评论 -
最小操作数——Google2013笔试题
题目描述:(题目链接:最小操作数)给定一个原串和目标串,能对源串进行如下操作: 1.在给定位置插入一个字符;2.替换任意字符 ;3.删除任意字符。要求完成一个函数,返回最少的操作数,使得源串进行这些操作后等于目标串。源串和目标串长度都小于2000。举个例子来直观理解一下这个题目:将kitten字符串转化成sitting需要经过如下三步:sit原创 2016-08-11 17:13:40 · 4097 阅读 · 0 评论 -
罪犯转移问题思考——2016百度编程题
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式? 题目链接见罪犯转移。输入描述:第一行数据三个整数:n,t,c(1≤n≤2e5,0≤t≤1e9,1≤c≤n),第二行按入狱时间给出每个犯人的罪行值ai(0≤ai原创 2016-08-10 21:22:16 · 1732 阅读 · 0 评论 -
卡特兰数相关问题总结
一、什么是Catalan数说到Catalan数,就不得不提及Catalan序列,Catalan序列是一个整数序列,其通项公式是递推公式是C(n) = C(1)*C(n-1) + C(2)*C(n-2) + ... + C(n-1)C(1),n>=2我们从中取出的就叫做第n个Catalan数,前几个Catalan数如下:1, 1, 2, 5, 14, 42, 132, 4原创 2016-08-08 17:11:21 · 5781 阅读 · 2 评论 -
剑指offer——栈与队列之间的相互实现
题目描述1:用两个栈来实现一个队列,完成队列的Push和Pop操作。在线编程见用两个栈实现队列。分析:队列的特点是“先进先出”,而栈的特点是“先进后出”。始终维护s1作为存储空间,以s2作为临时缓冲区。入队时,将元素压入s1。出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。具体分析见下图:代码如下:原创 2016-08-05 22:55:39 · 866 阅读 · 0 评论 -
剑指offer面试题——从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。 在线编程链接见:从尾到头打印链表输入描述:输入为链表的表头输出描述:输出为需要打印的“新链表”的表头分析:这题看似比较简单,但是其实有很多思路可以解决。下面作一个简单的总结。思路1:遍历链表,采用头插法将每个元素插入到vector容器中,代码如下:vector printListFromTailToH原创 2016-08-05 13:28:07 · 1989 阅读 · 1 评论 -
剑指offer面试题——替换空格
题目 :请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。在线编程链接见:替换空格。分析:首先容易想到的就是从前往后扫描,如果空格,就替换为%20,但是这样需要移动空格后的元素。还有一种方法,首先遍历一遍字符串,统计出空格的个数,并可以由此计算出替换之后的字符串的长度。每原创 2016-08-05 11:21:39 · 538 阅读 · 0 评论 -
C++二叉树的遍历总结
1、二叉树的存储结构 二叉树是非线性结构,即每个数据结点至多只有一个前驱,但可以有多个后继。它可采用顺序存储结构和链式存储结构。(1)顺序存储结构 二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点,一般用于完全二叉树。代码如下:#define Maxsize 100 //假设一维数组最多存放100个元素typedef char Da原创 2016-08-03 22:33:00 · 1602 阅读 · 1 评论 -
十道经典智力题分析
1、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间 分析:先点燃一根香的一端,同时点燃另一根香的两端,当两端点燃的香燃尽时,便是半小时的时间;在两端点燃的香燃尽时,点燃剩下那根香的另外一端,这样,从剩下那根香的另一端开始点燃,到最终燃尽,便是15分钟的时间。2、一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属原创 2016-07-24 16:44:20 · 5616 阅读 · 0 评论 -
PAT上面一道关于“月饼”的题目的解法
题目详细描述见PAT:月饼 (25)。根据题意,首先要得到每种月饼的价格,根据价格的大小选择要销售的月饼,最后计算最大收益。具体到编程,有多种方法。 思路1:计算得到每种月饼的价格,然后将每种月饼的价格和每种月饼的总售价存放在一个pair类型的vector容器中,再利用STL中sort()函数对vector的元素进行排序,可得到最终结果。代码如下:#include#inclu原创 2016-05-31 16:00:48 · 2218 阅读 · 0 评论 -
从n个无序的数中选出m个最大数
从n个无序的数中选出m个最大数原创 2016-05-27 16:11:23 · 7521 阅读 · 1 评论 -
冒泡排序及其改进
总结了冒泡排序及其改进的算法。原创 2016-05-24 11:53:54 · 1435 阅读 · 0 评论 -
全排列的一些总结
今天做了一道网易的笔试题——数列还原。里面用到了全排列的想法,因此学习并总结了一下全排列算法。1、全排列问题描述 输入一个字符串或者序列,打印出该字符串或序列中字符或元素的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。2、解决思路 查了一些资料,很多都是利用递归的思想解决的原创 2016-08-09 17:32:02 · 6103 阅读 · 0 评论 -
网易2016软件工程师笔试题-----[编程题] 奖学金(C++实现)
网易2016软件工程师笔试题动态规划原创 2016-08-01 10:46:17 · 2589 阅读 · 0 评论 -
合唱团——2016网易内推编程题
题目描述:(题目链接:合唱团)有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 i(-50 输出描述:输出一行表示最大的乘积。原创 2016-08-15 18:51:38 · 3712 阅读 · 6 评论 -
算法基础总结
最近主要在看算法与数据结构相关的知识点,现在把一些需要看或者已经看了的算法总结一下,列一个大纲,慢慢消化。一、排序对于每个排序算法需要思考的问题如下:1、每个算法的思想是什么? 2、每个算法的稳定性怎样?时间复杂度是多少? 3、在什么情况下,算法出现最好情况 or 最坏情况? 4、每种算法的具体实现又是怎样的?常用的排序算法的复杂度与稳定性汇总如下表,以供参考。原创 2016-08-19 22:58:04 · 3182 阅读 · 0 评论 -
迅雷2014C++研发笔试卷C解题分析
试卷链接见迅雷2014C++研发笔试卷C。1、下列运算符中,在C++语言中不能重载的是:A.* B.>= C.:: D. delete分析:在C++中,sizeof运算符,.成员运算符,.*成员指针运算符,::作用域解析运算符以及?:条件运算符不能被重载,因此答案选C。2、下面关于多态性的描述,错误的是:C++语言的多态性分为编译时的多态性和运行时的多原创 2016-08-28 14:43:04 · 2223 阅读 · 0 评论