algorithm
文章平均质量分 86
君记否
么么哒^ ^
展开
-
字符串全排列代码
Permutation(char a[], int start, int end)<br />{<br />int i;<br />char temp;<br />if(start == end)<br /> {<br />for(i =0; i <= end; i++)<br /> printf(" %c ",a[i]);<br /> printf("/n");<br /> }<br />else<br /> {<br />fo转载 2010-12-02 14:36:00 · 529 阅读 · 0 评论 -
常见算法笔试或面试题
<br />Problem 3:用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)<br />提示:x&(x-1)<br /> <br />转载 2011-01-04 16:18:00 · 487 阅读 · 0 评论 -
红黑树原理详解
<br /> <br /> <br />前言:<br /> 之所以要写这篇文章,第一个目的是为了各位朋友在查看我写的源代码之前有一个可以理解理论的文章因为红黑树还是有点难的,<br />如果不想搞懂理论,而直接看代码,那绝对是云里雾里,不知所云。第二个目的是我觉得网上虽然后不少我文章也在讲,但是我就是理解<br />不上有点困难,在我参考了很多文章之后,认真阅读才慢慢摸透了其中的原理,所以我想用自己的方式来表达,希望有助于各位的朋友理解。<br /><br /><br /> <br />你可转载 2010-11-12 10:14:00 · 1287 阅读 · 0 评论 -
模板元编程
<br />/*<br />第12题<br />题目:求1+2+…+n,<br />要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。<br /><br />思路:模板元编程,最快捷的计算方式,编译期完成计算<br />*/<br />C/C++ code<br /><br />#include <iostream><br /><br />usingnamespace std;<br /><br />templa转载 2010-11-17 22:27:00 · 466 阅读 · 0 评论 -
反转链表
方法一:递归版本C/C++ codetemplateListNode* reverse_slist_recursive(ListNode* head){if (!head||!(head->next)) return head; ListNode* rtn = reverse_list(head->next); head->next->next = head; head->next = NULL;return rtn;}方法二:利用循环C/C++ code转载 2010-11-17 22:37:00 · 412 阅读 · 0 评论 -
排序算法总结
<br />1、直接插入排序<br />1)稳定性:稳定<br />2)适用情况:待排记录规模较小,或者记录已经基本有序<br />2、希尔排序<br />1)稳定性:不稳定<br />2)特点:希尔排序的执行时间依赖于增量序列,它的效率比直接插入排序有较大的改进。<br />3、冒泡排序<br />1)稳定性:稳定<br />2)特点:当待排记录基本有序是,冒泡排序是不错的选择;但由于冒泡排序的记录移动次数较多,故平均时间性能比直接插入排序差很多。<br />4、快速排序<br />1)稳定性:不稳定<b转载 2010-11-21 22:29:00 · 512 阅读 · 0 评论 -
两道算法面试题
http://topic.csdn.net/u/20120313/10/8feef8d4-6cd6-41a4-8955-a1bf7f9734b8.html1、有81个选手,9个赛道,要求选出前4名。需要多少场?分9组先跑9场小组赛,再用9个第1跑1场决赛,共10场,此时可以确定的只有第1名。那么2至4名有可能是谁呢?特殊情况下,有可能1-4名都被分到了同一组,并且在小组赛里,2转载 2012-03-19 15:04:16 · 548 阅读 · 0 评论 -
leetcode 题库 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上原创 2018-09-24 09:43:31 · 257 阅读 · 0 评论 -
leetcode 解题 给定一个没有重复数字的序列,返回其所有可能的全排列。
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]class Solution(object): def permute(self, nums): """ :type n...原创 2018-09-24 12:31:52 · 3473 阅读 · 0 评论 -
leetcode 解题 最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5 逆序循环,注意字符串末尾出现空格的情况class Solution(object): def lengthOfLastWord(self,...原创 2018-09-24 13:54:23 · 154 阅读 · 0 评论 -
leetcode 解题 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321...原创 2018-09-26 15:02:30 · 158 阅读 · 0 评论 -
LeetCodet题目 四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。class Solution(object): def findAllGroups(self, target, sta...原创 2018-09-22 10:49:35 · 148 阅读 · 0 评论 -
趣味题系列:帽子戏法;警察抓逃犯问题 ;史密斯夫妇握手问题
6、题目: 现在有10个人被一个魔鬼逮住了。魔鬼对于直接把人杀掉的方法不感兴趣了。于是,他就想了一个杀人的新花样。是这样的,一天晚上,魔鬼向这十个人宣布了游戏规则,即明早他要把他们10个人排成一排,然后从一堆既有无限多的白帽子混会着无限多的黑帽子的帽子堆里为每个人随机抽取一顶帽子,给他们10个人都戴上帽子。因为10个人是排成一排的,所以排在第10个的人可以看到前面9个人帽子的颜色,排在第9个人可以看到前面8个人的帽子的颜色,...以此类推。然后,魔鬼会从排在第10个人开始,问他,你头上的帽转载 2010-12-27 13:49:00 · 4411 阅读 · 0 评论 -
计算一个整形数组里的连续元素和的最大值
<br />void max_sum(int *a, int len, int &low, int &high, int &max)<br />{<br /> int temp_max = 0;<br /> int temp_sum = 0;<br /> int i = 0;<br /> int temp_l =0, temp_h = 0;<br /> for (; i < len; i++)<br /> {<br /> if (a[i] < 0)<br /原创 2010-12-22 11:21:00 · 737 阅读 · 0 评论 -
每天一道算法题10 找出数组中两个只出现一次的数字
<br />题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。<br />分析:这是一道很新颖的关于位运算的面试题。<br />首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。<br />这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从转载 2010-12-02 15:28:00 · 517 阅读 · 0 评论 -
在字符串中删除特定的字符
<br />题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。<br />分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。<br />要 编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符转载 2010-12-02 17:06:00 · 523 阅读 · 0 评论 -
每天一道算法题8 在排序数组中查找和为给定值的两个数字
<br />题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。<br />例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。<br />分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输入的数字。可惜这种思路需要的时间转载 2010-12-02 13:16:00 · 686 阅读 · 0 评论 -
设计包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。<br />分析:这是去年google的一道面试题。<br />我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。<br />在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素转载 2010-12-02 17:24:00 · 525 阅读 · 0 评论 -
找出两个链表的第一个公共结点
<br />题目:两个单向链表,找出它们的第一个公共结点。<br />链表的结点定义为:<br />structListNode<br />{<br /> int m_nKey;<br /> ListNode* m_pNext;<br />};<br />分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。<br />如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个转载 2010-12-02 15:51:00 · 2889 阅读 · 0 评论 -
从字符串中找出一个最长的不含重复字符的子字符串
趋势科技2011校园招聘的一道编程笔试题题目:编写一个函数int search(char *text),text为输入的字符串,从字符串中找出一个最长的不含重复字符的子字符串,例如“axdbx”,返回4,子字符串为“axdb”,而“axdbxce”,返回5,子字符串为“dbxce”。以下是我的答案,当然,较当时答题时的答案少有改动,但思路是一样的,毕竟答题时没有环境让我去debug。该算法时间复杂度为O(n)。并且不需要反复重置pos数组,每次访问到重新赋值即可。int find_max_str(char*原创 2010-12-03 22:54:00 · 2276 阅读 · 2 评论 -
花费我一下午时间的快速排序
<br />快速排序这个算法看似很简单,但折磨了我一下午,主要是边界值问题,看来以后得好好研究了,下面贴出实现代码。<br />每一行代码都有每一行代码的作用,比如说那两个循环,换一种写法都不行。<br /> <br />void quick_sort(int *a, int low, int high)<br />{<br /> int begin = low;<br /> int j = high + 1;<br /> while(low < j)<br /> {<br />原创 2010-12-05 22:16:00 · 887 阅读 · 0 评论 -
各种排序算法分析总结
<br />排序算法:<br /> 1)分类:<br /> 1)插入排序(直接插入排序、希尔排序)<br /> 2)交换排序(冒泡排序、快速排序)<br /> 3)选择排序(直接选择排序、堆排序)<br /> 4)归并排序<br /> 5)分配排序(箱排序、基数排序)<br /> 所需辅助空间最多:归并排序<br /> 所需辅助空间最少:堆排序<br /> 平均速度最快:快速排序<br /> 不稳定:快速排序,希尔排序,堆排序。<br /> 1)选择排序算法的时候<br /> 1.数转载 2010-12-05 22:30:00 · 680 阅读 · 0 评论 -
Fibonacci(斐波那契)序列的递归和非递归算法
<br />Fibonacci(斐波那契)序列的递归算法大家都已经很熟悉了:// Fibonacci序列第n项的值<br />// 递归算法<br />unsigned int Fib1(unsigned int n)<br />{<br /> if (n == 1 || n == 2)<br /> return 1;<br /> else<br /> return Fib(n - 1) + Fib(n - 2);<br />}<br转载 2010-12-07 11:30:00 · 641 阅读 · 0 评论 -
每天一道算法题19 寻找丑数
<br />题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。<br />分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。<br />所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果转载 2010-12-07 11:41:00 · 446 阅读 · 0 评论 -
求 a的b次方对c求余 的结果
<br />求 a的b次方对c求余 的结果,其中a b c都是非负整数<br />求 a的b次方 最简单的方法是<br /> s = 1;<br /> for( i=0; i!=b; ++i ) s*=a;<br /> return s;<br />这个算法效率太低,假如只能想到这个算法,出门别说自己是搞软件的^_^<br />考虑到 a^b = (a的平方)^(b的一半) 这个公式,可以写成<br /> if(b==0) return 1;<br />转载 2010-12-20 17:12:00 · 6844 阅读 · 0 评论 -
leetcode 解题 搜索插入位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。 class Solution(object): def searchInsert(self, nums, target): """ :type nums: List[int] ...原创 2019-02-22 11:26:37 · 128 阅读 · 0 评论