
算法
liyf__
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
全排列算法(递归实现) 组合算法(递归,位运算实现)
//……………………………..全排列…………………….//判断要交换的两个数是否相等,如果相等就不进行交换#include<iostream>using namespace std;bool IsSwap(int list[],int begin,int end){ for(int i = begin;i<end;i++) if(list[i] == list[end])原创 2017-08-23 17:27:36 · 1837 阅读 · 0 评论 -
两个字符串是否为变形词
/* 1、判断两个字符串是否为变形词 【题目】给定两个字符串s1,s2, 如果s1和s2中出现的字符种类和字符次数一样多,则s1和s2互为变形词,实现函数判断两个字符串是否为变形次。 【例如】s1=”123”,s2=”321” ,return true; s1=”123”,s2=”2113”, return false; */#include<iostream>#incl原创 2017-08-11 11:54:20 · 248 阅读 · 0 评论 -
字符串中数字子串的求和
if 0/* 2、字符串中数字子串的求和 【题目】给定一个字符串str,求其中全部数字串所代表的数组之和 【要求】a>忽略小数点字符,如”A.1.3”其中包含两个数字1和3 b>如果紧贴数字子串的左侧出现字符”-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数时,则视为正,如,”A-1BC- -12”,其中包含数字为-1和12 【例如】str=”A1CD2E33” 结果为3原创 2017-08-11 11:52:37 · 924 阅读 · 0 评论 -
删除部分数字问题
//搜狐2017笔试题 /* 笔试题:给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。 */ /* 解题思路:例如数字51643,需要删除3位数而使剩下的数字组合最大,此时需要从头开始两个数字比较大小, 如果当前数字比其下一位小,则删除当前数字,此时变为5643,继续从头开始遍历,5比6小,则删除5,变为643原创 2017-08-16 14:55:26 · 3540 阅读 · 2 评论 -
算法(递归)--汉诺塔
//: 一个直接或间接地调用自身的算法称为递归算法,一个使用函数自身给出定义的函数称为递归函数。//双递归函数:当一个函数及它的一个变量是由函数自身定义时,称这个函数式双递归函数。//.1.汉诺塔...#if 0void hanoi(int n,char a,char b,char c){void move(char x,char y);if(n==1)move(a,c);else原创 2017-05-21 17:48:15 · 521 阅读 · 0 评论 -
算法--二分法查找数字
//.4.二分法查找数字#if 0int Find(int a[],int low,int high,int key) //查找函数{if(low>high) return -1;int mid=(low+high)/2;if(a[mid]==key)return mid;else if(key<a[mid])return Find(a,low,mid-1,key);原创 2017-05-21 17:43:08 · 817 阅读 · 0 评论 -
算法--分而治之法
//.5.利用分而治之算法求一个整数数组中的最大值#if 0int Max(int a[],int n){int max1; if(n==1)return a[0];else{max1=Max(a,n-1);if(max1>a[n-1])return max1;elsereturn a[n-1];}}void main(){int a[]={6,10,8,1原创 2017-05-21 17:41:51 · 1068 阅读 · 0 评论 -
算法--正整数划分
//.7.正整数划分问题#if 0int Func(int n,int m){if((n<1)||(m<1))return 0;if((n==1)||(m==1))return 1;if(n<m)return Func(n,n);if(n==m)return Func(n,m-1)+1;return Func(n,m-1)+Func(n-m,m);}void main(原创 2017-05-21 17:40:03 · 797 阅读 · 0 评论 -
排序--折半插入排序
#if 0//............................折半插入排序(二分法插入排序)/* 折半插入排序的元素移动次数与直接插入排序相同,依赖于元素的初始排列, 折半插入排序所需附加存储空间和直接插入排序相同,但是折半插入排序减少了关键字的比较次数,而记录的次数不变。 折半插入排序是一种稳定的排序算法*/#include<iostream>using namesp原创 2017-05-20 17:35:03 · 534 阅读 · 0 评论 -
排序--选择排序
//................................选择排序/*基本思想:每一趟在后面n-i个待排序元素中选出排序码最小的元素,作为有序元素序列的第i个元素。 直接选择排序的排序码比较次数与元素的初始排列无关,但是元素的移动次数与元素序列的初始排列有关 直接选择排序是一种不稳定的排序算法;*/#if 0#include<iostream>using names原创 2017-05-20 17:32:12 · 233 阅读 · 0 评论 -
一元多项式的加减乘运算
//............polyn.h#ifndef _POLYN_H#define _POLYN_H#include<iostream>#include<assert.h>using namespace std;typedef struct PolynNode{float coef;int expn;struct PolynNode *link;}PolynNode;t原创 2017-05-20 17:09:42 · 1411 阅读 · 0 评论 -
螺旋矩阵-由内向外旋转
/*算法-螺旋矩阵--由内向外旋转 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 注:设1点的坐标是(0,0),x方向向右为正,y方向向下为正,例如 2点的坐标为(0,1),编程实现输入任意一点坐标(x,y),输出所对应的原创 2017-05-20 16:17:34 · 2542 阅读 · 0 评论 -
输入一个正整数n,输出一个最小正整数m,使得m的各位乘积等于n
/* 1.:编写一个函数func,输入一个正整数n,返回一个最小的正整数m,使得m的各位乘积等于n,例如输入100.输出455,输入36,输出49 */#if 0int func(int n){ int num=0; int s; int m[10]={0}; int p=0;//数组m的下标 int sum=n; int i=2;//1~81原创 2017-08-13 09:14:09 · 8167 阅读 · 2 评论 -
数组中出现次数超过一半的数字
/*面试题29:数组中出现次数超过一半的数字 :数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 */ /* 解题思路:1.首先需要判断输入的数组是否有效。 2.数组中有一个数字出现的次数超过数组长度的一半,说明它出现的次数比其他所有数字出现的次数的和还要多, 那么要找的数字肯定是最后一次把次数设为1时对应的数字。原创 2017-08-20 09:53:46 · 800 阅读 · 0 评论 -
求一个序列的最大连续长度
题目要求: 给定一个递增序列,求该序列的连续最大长度。 解题思路:依次遍历,当序列数字连续时,增加其长度,当不连续时,重新初始化长度,最终返回该序列的最大连续长度。#include<iostream>using namespace std;int getMaxSize(int* array,int length){ int count = 1; int原创 2017-09-09 17:04:47 · 1395 阅读 · 0 评论 -
Kolakoski序列及应用拓展
/* Kolakoski序列是个自生成的无限序列。 例如,当给定的整数组为[1,2]时,Kolakoski序列是这样的: [1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1……]; 对于其他给定的整数组,同样可以用类似的方法构造Kolakoski序列,例如给定整数组[2,3]时, [2,2,3,3,2,2,2,3,3,3,2原创 2017-09-09 16:59:56 · 547 阅读 · 0 评论 -
跳水运动员问题
//360笔试编程题/*题目描述:2.一年一度的跳水比赛又开始了,全国各地的运动员都纷纷报名参加了比赛。在比赛之前,举办方让运动员抽签决定了比赛的出场顺序,运动员会根据这个顺序依次出场,完成自己的动作,然后裁判评分。为了做好充分的准备和调整赛前心态,运动员希望了解其他运动员的实力,希望知道在自己出场之前,有多少位运动员上赛季的得分是高于自己的。现在你是一位数据分析家,你可以原创 2017-08-29 20:21:41 · 735 阅读 · 0 评论 -
卖粉笔
/360笔试编程----卖粉笔/*1.小明一共有n根彩色粉笔,m根白色粉笔,现在可以用a根彩色粉笔和b根白色粉笔组成一盒卖x元,或者c根白色粉笔组成一盒卖y元,或者d根彩色粉笔组成一盒卖z元,小明最多可以用这些粉笔卖多少元?不一定要把所有粉笔卖完,小明只希望利益最大化。*///解题思路:贪心算法:采取循环将所有可能的情况都走一遍,最后取最优#includeusin原创 2017-08-29 20:11:09 · 978 阅读 · 0 评论 -
geohash编码
//腾讯校招笔试题/*geohash 编码: geohash 常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二部是 base32 转码。此题考察唯独的二进制编码:算法对维度 [-90,90] 通过二分法进行无限逼近(取决于所需精度,本题精度为 6 )。注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间。算法举例如下:(1)原创 2017-08-29 19:54:52 · 847 阅读 · 0 评论 -
Kolakoski序列及应用扩展
/*题目要求:Kolakoski序列是个自生成的无限序列。例如,当给定的整数组为[1,2]时,Kolakoski序列是这样的:[1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1……];对于其他给定的整数组,同样可以用类似的方法构造Kolakoski序列,例如给定整数组[2,3]时,[2,2,3,3,2,2,2,3原创 2017-08-29 11:54:43 · 584 阅读 · 0 评论 -
网易校招笔试-序列逆序问题
题目四:**小易有一个长度为n的整数序列,a_1,……a_n.,然后考虑在一个空序列b上进行n次以下操作。 1:将a_i放入b序列的末尾 2:逆置b序列。 小易需要你计算输出操作n次之后的b序列。** */ /* 解题思路: 1.如果只输入一个数1,那么输出为1。 2.如果输入两个数,1 2,逆置后为2 1. 3.如果输入原创 2017-08-24 11:13:29 · 502 阅读 · 0 评论 -
连续子数组的最大和
/* 面试题31:连续子数组的最大和 :输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组,求所有子数组的和的最大值。要求时间复杂度为O(n). */ /* 解题思路:1.例如一个数组{5,2,-10,7,2,-1},先初始化和为0,从第一个数字开始累加,此时的和就是第一个数字5, 2.此时再继续加,当加到第二个数字和为7,判断这个数原创 2017-08-22 17:21:25 · 270 阅读 · 0 评论 -
最小的k个数
if 0/* 面试题30:最小的k个数 :输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 解题思路: 1.在n个整数中找最小的k个数,我们可以创建一个大小为k的数据容器来存储最小的k个数字。 2.每次从输入的n个整数中读取一个数,此时如果容器中已有的数字小于k个,则直接将 读入的数字放入容器,原创 2017-08-22 16:19:58 · 296 阅读 · 0 评论 -
顺时针打印矩阵
/* 面试题20:顺时针打印矩阵 */void PrintNumber(int number){ printf("%d ",number);}//一步一步打印矩阵void PrintMatixInCircle(int** numbers,int columns,int rows,int start){ int endX = columns-1-start; in原创 2017-08-14 16:26:28 · 336 阅读 · 0 评论 -
替换空格
/*面试例题4:替换空格 请实现一个函数,把字符串中的每个空格替换成“%20”。 例如输入“We are happy",则输出”We%20are%20happy"。转换的规则是在‘%’后面跟上ASCII码的两位十六进制的表示,比如空格的ASCII码是32,即16进制的0x20,因此空格被替换成“%20”,再比如‘#’的ASCII码为35,即十六进制原创 2017-05-19 16:30:57 · 355 阅读 · 0 评论 -
螺旋矩阵--由外向内旋转输出
/*算法--螺旋矩阵-由外向内旋转 :从首坐标开始顺时针依次增大。1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9*/#if 0#include <iostream>using namespace std;#define MAX 5int a[MAX][MAX]; //保存5x5的矩阵void F原创 2017-05-20 16:02:21 · 1053 阅读 · 0 评论 -
打印2~n的具体素数值
#if 0#include<stdio.h>#include<algorithm>#include<math.h>/*算法-----打印2-n的具体素数值 判断j是否为素数从2-(int)(sqrt(k))遍历*/int JudgePrime(int a){int j;for(j = 2;j<(int)sqrt(double(a));j++){if(a%j == 0)原创 2017-05-19 18:43:06 · 556 阅读 · 0 评论 -
统计每个ASCII字符出现的次数
```#if 0#include<iostream>#include<cstdlib>using namespace std;/*统计每个ASCII字符出现的次数,其中每个ASCII字符对应唯一一个整数值*/void histogram(char* src){int i;char hist[256];for(i = 0;i<256;i++){hist[i] = 0;}原创 2017-05-19 18:41:14 · 1291 阅读 · 0 评论 -
求最大利益的简单算法
//求最大利益的简单算法#include<iostream>#include<algorithm>using namespace std;#if 0/*最大利益:例如 输入5 3 1 4 3 6 5是初始值 之后价格连续下降直至1,又开始上涨,当涨到6的时候能够获得最大利益为5 就是所求的值*/static const int MAX = 200000;int main(){原创 2017-05-19 16:50:44 · 827 阅读 · 0 评论 -
排序算法--对公司员工年龄的排序
/*.................................//排序算法--对公司员工的年龄排序,要求时间效率O(n)解题思路: 公司员工的年龄有一个范围 这里规定0~99 用长度100的整数数组作为辅助空间换来了O(n)的时间效率。*/#include<stdio.h>#define N 10void SortAges(int ages[],int length)原创 2017-05-19 16:37:42 · 3849 阅读 · 0 评论 -
二维数组中某一元素的查找
/*面试例题3:二维数组中某一元素的查找 :在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:首先选取数组中右上角的数字,如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数原创 2017-05-19 16:32:34 · 2381 阅读 · 1 评论 -
斐波那契数列——循环实现
#if 0/*斐波那契数列: 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义如下: f(n) = 0 n = 0 1 n = 1f(n-1)+f(n-2) n>1递归实现的时间复杂度是以n的指数的方式递增的。*/#include<stdio.h>long long F原创 2017-05-19 16:28:43 · 1382 阅读 · 0 评论 -
交换两个数的三种方法
#if 0 /* .....交换两个数的值: 方法1:通过临时变量交换 方法2:通过加减交换 方法3:通过异或来进行交换 */#include<stdio.h>//.....借用临时变量交换int main(){int a,b;int t = 0;printf("请输入两个数的值:a和b:");scanf("%d%d",&a原创 2017-05-19 16:26:35 · 626 阅读 · 0 评论 -
找出旋转数组中的最小数字
*面试题8: 旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如:数组{3,4,5,1,2}位{1,2,3,4,5}得一个旋转,该数组的最小值为1.*/#if 0#include<stdio.h>#define N 8int MinInOrder(int* numbers原创 2017-05-19 16:24:15 · 409 阅读 · 0 评论 -
求一个数二进制中1的个数
/*面试题10: 二进制中1的个数题目:请实现一个函数,输入一个整数,输出该二进制表示中1的个数。 例如把9表示成二进制是1001,有两位是1,因此如果输入9,该函数输出2.*/#if 0#include<stdio.h>/*法一: 1.先判断整数二进制表示中最右边一位是不是1,接着右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断是不是1, 这样每原创 2017-05-19 16:21:43 · 507 阅读 · 0 评论 -
斐波那契数列——递归实现
#if 0/*斐波那契数列: 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义如下: f(n) = 0 n = 0 =1 n = 1 =f(n-1)+f(n-2) n>1递归实现的时间复杂度是以n的指数的方式递增的。*/long long F原创 2017-05-19 16:16:27 · 741 阅读 · 0 评论