
Algorithm Probelm
文章平均质量分 70
bigface1234fdfg
贴在地上过日子,有个好处就是,摔也摔不到哪儿去。
展开
-
面试题中自增自减类型题目的解题技巧
在面试中,我们经常被问有关于自增自减的题目,这样的题目简单易懂,便于检验面试者的编程基本功,楼主在百度实习面试中就被问到。现在总结一下解题技巧: 对于以下,有int x = 5, y = 6, z; 题目1:z = ++x + y++; 题目2:z = ++x + x++; 题目3:x = ++x + x++; 对于上面的三道题目,原创 2015-05-18 15:57:58 · 2368 阅读 · 2 评论 -
寻找和为定值的两个数
给定一个数组(无序或者有序,两种情况都要考虑),找出和为M的两个数。最多时间复杂度能有多少?原创 2014-12-06 14:22:17 · 1501 阅读 · 0 评论 -
关于水王的题目——找到出现次数大于/等于数组长度一半的数
关于水王的题目——找到出现次数大于/等于数组长度一半的数 1. 题目描述 一个长度为n的数组,里面有一些数出现的次数比较多。请找到出现次数大于数组长度一半的数。(水王1) 一个长度为n的数组,里面有一些数出现的次数比较多。请找到出现次数等于数组长度一半的数。(水王2)原创 2014-12-10 15:04:34 · 1898 阅读 · 0 评论 -
两个有序数组合并成一个有序数组
两个有序数组合并成一个有序数组 1. 题目描述 数组a是有序的,数组b也是有序的,如何高效地合并它们成一个数组,并且新数组也是有序的?2. 从后往前合并 这道题目是师兄电面阿里的时候,问到的一道题目。现在我们来说一下解法~ 假设数组a足够长,可以在数组a上合并二者。我们的解法基本思想就是从后往前合并数组。 每次合并的时候,都要比较a和b当前数组的大小,取较大的值后移,注意一定要是后移! 为什么从后往前呢?其实就是为了方便后移,因为较大的原创 2014-12-12 16:34:56 · 3531 阅读 · 0 评论 -
程序员编程技术学习笔记——左旋转字符串
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。原创 2014-11-27 11:02:32 · 960 阅读 · 0 评论 -
动态规划题目(一)——换零钱
想兑换100元钱,有1,2,5,10四种钱,问总共有多少兑换方法。下面提供两种实现方式,其中代码注释的很清楚。关于动态规划的基本原理,参考:http://www.cnblogs.com/sdjl/articles/1274312.html原创 2014-12-08 15:35:11 · 7570 阅读 · 0 评论 -
象棋中的将帅互斥问题(二)——单个变量实现多层循环
象棋中的将帅互斥问题(二)——单个变量实现多层循环 《编程之美》上面对这个问题还提供了一种巧妙的方法,它没有使用bit存储的思想来减少空间的使用。而是使用了另外一项技术:运用单个变量实现多层循环。这篇博客就来详细说一下这个技术~ 这道题目需要用一个byte的大小,来实现9*9两层循环。我们知道假如令value=9*9,那么value%9就会得到1~9的变化范围,value/9又是另外一个1~9的变化范围,这样我们就可以巧妙实现两层循环。 但是,我们想实现多层循环呢?比如原创 2014-12-23 14:26:07 · 926 阅读 · 0 评论 -
计算字符串编辑距离
计算字符串编辑距离题目描述:给定两个字符串,要求二者之间的编辑距离。分析:字符串的编辑主要有三种方式:增加、删除和修改。这道题目按照递归的方式,逐个判断每个字符。具体而言,如果str1和str2的第一个字符相等,则往后移,编辑的距离为后续的字符串;如果第一个不等,则我们可以增加、删除和修改str1,也可以增加、删除和修改str2,还可以同时增加、删除和修改str1和str2。不管以何种方式修改哪一个原创 2015-02-09 15:09:14 · 1094 阅读 · 1 评论 -
程序员编程技术学习笔记——最长回文子串
程序员编程技术学习笔记——最长回文子串1. 题目描述 给定一个字符串,求它的最长回文子串的长度。例如:abaaaabaaa的最长回文子串就是以b为中心,长度为7的回文子串aaabaaa.2. 解法1:中间扩展法 我们可以以字符串中每一个字符为中心,往左右两边扩展,在满足回文字符串条件下,能够扩展的最大长度就是回文子串的长度。注意:这种方法需要考虑子串长度奇数/偶数的原创 2014-12-01 07:54:21 · 808 阅读 · 0 评论 -
字符串全排列——重复和非重复
字符串全排列1. 题目 输入一个字符串,打印出该字符串中字符的所有排列。例如:输入abc, 我们就可以得到abc, acb, bac, bca, cab, cba。这个题目主要有两种思路:递归和非递归。下面我们逐一解释。2. 递归方法 基本原理我们用下图来展示:首先,让每个字符都当一次head,把第一个字符和后面的字符一一交换;原创 2014-12-03 08:45:29 · 4809 阅读 · 0 评论 -
程序员编程技术学习笔记——字符串包含
给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数boolStringContains(string &A, string &B)原创 2014-11-27 16:36:08 · 1364 阅读 · 0 评论 -
Substring with Concatenation of All Words——解题报告(窗口移动法)
【题目】You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in wordsexactly原创 2015-05-21 21:44:53 · 2096 阅读 · 0 评论 -
Valid Parentheses——解题报告
【题目】 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are原创 2015-05-08 10:22:37 · 678 阅读 · 0 评论 -
Remove Nth Node From End of List ——解题报告
【题目】 Given a linked list, remove the nth node from the end of list and return its head.For example,Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the原创 2015-05-08 09:47:32 · 701 阅读 · 0 评论 -
kSum问题的总结
kSum问题是一类题型,常见的有2Sum,3Sum,4Sum等。这篇博文就来总结一些kSum问题的解法,以及对应的时间复杂度。 1. 2Sum 在一个给定的数组nums中,寻找和为定值target的两个数。 【解法1】:把数组排序,然后使用two pointers的方法来求解。时间复杂度分析:排序O(nlogn),两指针遍历O(n),总体O(nlogn).原创 2015-05-07 11:11:07 · 2588 阅读 · 0 评论 -
关于阶乘的两个问题
关于阶乘的两个问题 这篇介绍两个和阶乘运算相关的两个问题。切记,不可把阶乘的结果计算出来,因为会溢出。也不要转换为字符串来做,因为比较麻烦。一般而言,我们可以通过数学的方法,转化为结果和N有关,而不是N!的结果有关。1. 计数N!末尾有几个零 给定一个N,计算N!的末端有几个零。这个问题如果把N!计算出来肯定是不现实的。像这种末尾计算有几个零,原创 2015-01-26 09:52:57 · 1565 阅读 · 4 评论 -
复习数据结构:排序算法(五)——快速排序的各种版本
之前已经比较熟悉快排的基本思想了,其实现的方式也有很多种。下面我们罗列一些常见的实现方式:版本一:算法导论上的单向扫描,选取最后一个元素作为主元#includeusing namespace std; int partition(int data[], int low, int high){ int pivot = data[high]; // let the原创 2015-02-24 16:41:23 · 986 阅读 · 0 评论 -
删除一个没有头节点链表中的某个节点
题目描述:给定一个链表,没有头节点,如何删除其中的某个随机节点呢?分析:如果一个链表没有头节点的话,那么我们就不可以找到被删除节点的前面一个节点。如何按照这个思路来,就无法实现功能了。 不如我们换一个思路,删除节点的目的是什么?是要达到被删除节点中的data被删除,也就是说,我们实际上只需要删除该节点的data,而不是整个节点。如何实现呢?我们可以把需要删除节点的后面一个节点中的data,依次往前原创 2015-02-09 15:47:29 · 1317 阅读 · 1 评论 -
约瑟夫环问题——初步了解+数组实现
约瑟夫环问题——初步了解+数组实现 一开始接触约瑟夫环问题,还是在C语言的书中,具体的题目如下:n个人围坐成一圈,选某个人开始(比如第1个),从1开始报数,沿着顺时针方向数到m的人被淘汰,然后后面一个人继续再从1开始报数,数到m时再淘汰一人。重复上面的过程,输出剩下的最后一个人。原创 2015-01-03 17:38:11 · 1636 阅读 · 0 评论 -
字符串组合——位运算
输入一个字符串,输入所有组合。例如:abc, 输出a, b, c, ab, ac, bc, abc。 位运算求解: 一个长度为n的字符串,它的组合有2^n-1中情况,我们用1 ~ 2^n-1的二进制来表示,每种情况下输出当前位等于1的字符。原创 2014-12-03 10:59:24 · 3565 阅读 · 0 评论 -
寻找最小的k个数
在一个长度为n的数组中,寻找最小的k个数。(最大的k个数解法类似)原创 2014-12-03 11:09:35 · 937 阅读 · 0 评论 -
最大连续子数组和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值,要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。原创 2014-12-08 10:19:12 · 792 阅读 · 0 评论 -
ZigZag Conversion
ZigZag Conversion 题目描述:The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better le原创 2015-01-19 16:25:55 · 632 阅读 · 0 评论 -
数组分割——解题笔记
数组分割——解题笔记 题目:有一个没有排序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组的和最接近。 分析:这道题目可以用动态规划求解,或者说是一个典型的0,1背包问题,对于第i的数,到底是放进去还是不放,就要看放了对结果有什么影响,不放对结果又有什么影响。而结果是依据题目而言的,这道题目中的结果就是数组之和原创 2015-02-04 15:12:52 · 1226 阅读 · 0 评论 -
最长递增子序列——解题报告
最长递增子序列——解题报告 题目描述:给定一个数组,长度为n,求出其中最长递增子序列。 分析:这题可以用动态规划求解,遍历i = 1 : n,当第i个数比前面j数大,而且前面的子序列长度加1之后,比现在的第i个子序列长的话,那么就变换。额,晦涩难懂额。。看代码可以好一些。 代码如下:#includeusing namespace std;原创 2015-02-04 10:48:29 · 828 阅读 · 0 评论 -
同时找到最大值和最小值——编程之美
同时找到最大值和最小值——编程之美 给定一个数组,我们可以同时找到其中的最大数和最小数吗?要求时间复杂度尽可能的小。编程之美上面提供了三个思路,我把它们都实现了,并做一些讲解补充。 思路一:两次遍历,分别得到最大值和最小值。时间复杂度为O(2*N)。 思路二:把最前面的两个数作为最值的候选,然后后面的数两原创 2015-02-03 17:05:04 · 2652 阅读 · 0 评论 -
求一个数的最大公约数的三种思路——解题笔记
求一个数的最大公约数的三种思路——解题笔记 编程之美上的题目:求一个数的最大公约数。 这道题目有三种解题思路,总结如下:思路一: 直接使用辗转相除法,这个不多介绍,代码如下:// 直接辗转相除法int gcd1(int a, int b){ for(int m = a%b; m != 0; m = a%b) {原创 2015-02-03 10:11:15 · 3277 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating let原创 2015-01-13 17:06:16 · 485 阅读 · 0 评论 -
小数转换分数
小数转换分数 小数转换成分数的时候,是让小数有更精确的表示。这个问题可以分两种情况来解决:有限小数和循环小数。 对于有限小数:我们可以直接把后面的a作为分子,分母就是10^n,然后再约分。约分就是求分子和分母的最大公约数,然后除以它就可以了。最大公约数的问题我们可以通过辗转相除法来做(会面会讲到其他更加高效的方法求最大公约数)。原创 2015-01-29 10:09:52 · 6434 阅读 · 0 评论 -
求前K小的数和第K小的数
求前K小的数和第K小的数1. 前K小的数 (堆排序实现)#include#include#include using namespace std; // 调整堆函数void HeapAdjust(int *a, int i, int size) // a:数组;i:节点index;size:树的规模{ int lchild = 2 * i + 1; // 节点的原创 2015-01-28 10:11:30 · 946 阅读 · 0 评论 -
Reverse Integer
Reverse Integer Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good que原创 2015-01-20 10:14:04 · 649 阅读 · 0 评论 -
String to Integer (atoi)
String to Integer (atoi) Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself原创 2015-01-20 22:55:50 · 456 阅读 · 0 评论 -
动态规划题目(二)——跳台阶
一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。求总共有多少总跳法,并分析算法的时间复杂度。原创 2014-12-08 16:00:56 · 1809 阅读 · 0 评论 -
基于快排思想的题目(一)——荷兰旗问题
快排的实现大家估计都知道,主要就是一个partition和交换的过程。这个思想其实是很巧妙的,基于此,很多题目都可以用它来很好地解决。这篇我们讲到了注明的荷兰旗问题,就是可以用到快排的思想~后续还有一系列的题目,应该都是可以用到快排思想的,后面慢慢整理ing~1. 题目描述 这个题目是由荷兰科学家Dijkstra提出来的,首先输入乱序排列的三色小球(红,白,蓝),如果通过两两交换,使得所有红色小球排在前面,白色小球排在中间,蓝色小球排在最后~原创 2014-12-08 17:07:43 · 2307 阅读 · 0 评论 -
动态规划题目(三)——最大连续乘积子串
动态规划题目(三)——最大连续乘积子串 1. 题目描述 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。也就是说,上述数组中,3 0.5 8这3个数的乘积30.58=12是最大的,而且是连续的。2. 动态规划求解 动态规划求解题目的时候最重要的是要找到状态转移方程!原创 2014-12-11 09:04:27 · 4032 阅读 · 0 评论 -
判断一个数是否为平方数
判断一个数是否为平方数 1. 题目描述 师兄面试的题目:给定一个数N,如何判断N时候为另一个数的平方,即是否为平方数。原创 2014-12-23 09:47:32 · 15971 阅读 · 2 评论 -
象棋中的将帅互斥问题(一)——使用bit存储
象棋中的将帅互斥问题——使用bit存储 1. 问题描述和分析 这道题目是编程之美放上面的一个游戏,其中用到了下面几个问题:如何使用bit存储数值,要知道一个byte可以放256的数;如何使用位域的思想实现储存原创 2014-12-23 10:39:46 · 796 阅读 · 0 评论 -
字符串移位包含的问题——解题笔记
字符串移位包含的问题——解题笔记 题目描述:给定两个字符串s1和s2,要求判定s2时候能够被s1做循环移位(rotate)得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。 solution 1: 直接的方法,把串s1遍历所有移位之后的情况,每种情况都判断一遍时候包含s2.原创 2015-02-08 10:55:24 · 1131 阅读 · 0 评论 -
求二进制数中1的个数(编程之美)
求二进制数中1的个数 题目描述:对于一个字节1BYTE = 8 bits的无符号变量,求其二进制表示中1的个数,要求算法的执行效率尽可能高。 题目分析:可以吧这个问题转化为判断这个数的最后1位数是否等于1,然后逐渐往右移位,不断判断下去,直到该数为零。 按照这种分析,那么就有两部分需要做:1)判断最后一位是否为零;2)如果右移位。原创 2015-01-22 08:57:30 · 1351 阅读 · 0 评论 -
String to Integer (atoi)
Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input ca原创 2015-01-21 07:39:36 · 568 阅读 · 0 评论