算法
文章平均质量分 69
peiyao456
这个作者很懒,什么都没留下…
展开
-
排序算法(一)
排序分为冒泡排序,选择排序,插入排序,希尔排序,合并排序,快速排序,堆排序等等,本篇文章我来详细解析冒泡排序,选择排序,直接插入排序。我们学会一种排序算法,只要是学会这种算法的思想,而不是单纯的记忆代码~~(一)冒泡排序:算法思想:通过一趟冒泡排序,将最大的元素放在最后一个位置(假如从小到大排序),或者将最小的元素放在最后一个位置(假如从大到小排序)。下边我用图来解释这个思想原创 2016-05-31 23:27:54 · 820 阅读 · 0 评论 -
金山笔试题中的SwapSort
问题描述:对一个数组按照给定的下标进行排序,仅使用两两交换的方式,要求不能对数组进行扩容,尽可能少的额外空间。如:原数组为A,B,C,D,E现给定的新位置为3,0,1,4,2那么排序后为D,A,B,E,C。函数原型:void SwapSort(int a[],int pos[],int n)很久一段时间之前,在看金山的笔试题的时候,就看到这个问题,当时可真算是一脸懵逼。直到现在再原创 2016-12-17 17:51:14 · 900 阅读 · 0 评论 -
小算法---寻找最小的不能由n个数选取求和的数
题目描述如下:看到这个题目,最容易想到的是暴力搜索法。然而,那不是好的办法,也是acm无法通过的办法。思路分析:对于给定的数组,我们必须先对其进行小到大的排序。如果最小的数不是1(大于1),输出的结果必然就是1啦。如果是1,通过当前数与前边所有数的和加1进行比较,如果当前数小于等于前边数的和加1,那么当前数也是可以找到它的几个因数的;否则,直接返回前边数的和加1.跳原创 2016-08-13 22:23:45 · 1069 阅读 · 0 评论 -
小算法--数组中元素的移动
题目描述:给定一个数组,假定这个数组中多个0,并且其他元素都各出现一次, 试将所有的0移到数组的尾部。 举例:给定数组: 1,3,0,5,7,0,3,4最后所得数组:1,3,5,7,3,4,0,0下边给出两种方法实现:方法一:原理就是遇到0的时候,后边的元素统一向前移动。如果前边是1个0,后边元素向前移动一个,如果两个0,后边元素向前移动2个,以此类推,最原创 2016-07-14 09:24:38 · 2474 阅读 · 0 评论 -
小算法----寻找插入元素的位置
题目如下:给定一个已经升序排好序的数组,以及一个数 targettarget,如果 targettarget 在数组中,返回它在数组中的位置。否则,返回 targettarget 插入数组后它应该在的位置。假设数组中没有重复的数。以下是简单的示例:[1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1,3,5,6], 7 → 4[1,3,5,6],原创 2016-07-31 17:06:41 · 989 阅读 · 0 评论 -
小算法--卡片问题
1> 题目描述:桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌的时候进行以下操作:把顶面开始的第一张牌扔掉,然后把第二张牌放到剩余整叠牌的最下面。2> 输入牌的初始数量n3> 输出分两行,第一行为每次扔掉的牌编号(空格隔开),第二行为最后剩下的牌。4> 样例输入:7输出:1 3 5 7 4 26原创 2016-07-15 22:26:53 · 2876 阅读 · 0 评论 -
小算法
1.给出两个字符串,s和t,判断s中的字符是否是t中的字符的随机组合。比如: s = "ten" t = "net'',满足s中的字符是 t中字符的随机组合。下边给出代码实现:#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includebool isAngarm(const char *s, const原创 2016-06-18 21:08:09 · 1430 阅读 · 0 评论 -
小算法-----查找缺失的数
题目描述 :在一个数组中,存放着0,1,2,.....这些数,其中有一个数丢了,查找丢失的元素 比如:数组为:0,1,2,4,5,6,则丢失的元素是3.我们可以利用hash法,创建一个数组(长度是原数组长度加1),将存在的元素在新数组中对应的位置进行标记。最后找到没有标记的就好。下边来看一般的解法:#define _CRT_SECURE_NO_WARNINGS 1#inc原创 2016-06-19 09:49:33 · 2515 阅读 · 0 评论 -
由一道acm题目所想到
已经很长一段时间没有ac题了,一周之前报名参加了计算客的编程大赛,虽然我的结果不是特别理想,但是还是学到了一些东西。下边,我先贴出题目和对应的程序源码:代码如下:(c语言)#includeint main(){ int n = 0; int i = 0; int totalTime = 0; scanf("%d",&n); int p[n]原创 2016-06-12 17:53:13 · 1936 阅读 · 1 评论 -
将一个罗马数转化成对应的阿拉伯数
阿拉伯数,顾名思义 ,就是我们平时使用最多的数,比如,1,2,3,4,.....罗马数,是数字最早的表示方式。基本的字符有:I、V、X、L、C、D、M,对应的数字分别是:1,5,10,50,100,500,1000。下边给出罗马数的计数规律: 1.两个相同的字符挨着写,表示相加。比如:XX转化成阿拉伯数就是20. 2.如果一个字符表示的数比左边的字符表示的数大,则转化成阿拉原创 2016-06-23 22:05:47 · 2706 阅读 · 0 评论 -
【贪心算法】背包问题
在之前的《算法设计与分析》课程的学习中,我们就接触到了贪心算法解决背包问题,当然还有动态规划法解决0-1背包问题等等。今天我就来分析贪心法解决背包问题。为了大家可以理解贪心算法,我先分享一道比较简单的题目。问题描述:给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No; 第一行有一个整数0问题分析:看到这个原创 2017-01-30 21:32:49 · 1506 阅读 · 0 评论