数据结构与算法
.
海洋 之心
阿里云社区专家博主,图神经网络-大数据-推荐系统研究者,专注于计算机领域前沿技术的分享等人工智能算法研究工作
展开
-
2020年4月蓝桥杯第二次模拟赛解题报告(本科组)Java语言 第三题
3 单词重排【问题描述】将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。请问,总共能排列如多少个不同的单词。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。解析求全排列,去重,计数结果:25201、利用Java的Set特性可以自动对目标答案去重2、利用深度优先遍历实现不断形成新的不同答案排列代码如下:原创 2020-10-23 21:21:47 · 263 阅读 · 0 评论 -
C语言实现高精度(大位数)阶乘
1.进位int s=c[j]*i+jw; jw=s/10; c[j]=s%10;源码#include <stdio.h>#include <string.h>#define Max 3000void multiply(int n);int main(){ int n; scanf("%d",&n); factorial(n);}void factorial(int n){ i原创 2020-07-10 13:10:52 · 825 阅读 · 0 评论 -
C语言实现高精度(大位数)乘法
1.正负号处理int flaga=1; if(s1[0]=='-'){ flaga=0; strcpy(s1,&s1[1]); }if((flaga&&!flagb)||(!flaga&&flagb)) putchar('-');2.最不利原则int len=lena+lenb;3.进位处理c[i+j]=a[i]*b[j]+jw+c[i+j]; jw=c[i+j]/原创 2020-07-10 12:59:28 · 662 阅读 · 0 评论 -
C语言实现高精度(大位数)减法
1.位数的确定:假设c用来保存大数据a与大数据b的差,那么c的长度len = max(lena,lenb)2.进位处理:if(a[i] < b[i]) { a[i+1]--; a[i] = a[i] + 10; } c[i] = a[i] - b[i];3.判断数的大小int compare(char s1[],char s2[]){ if(strlen(s1)>strlen(s2)) return 1; if(strlen(s1原创 2020-07-10 12:40:43 · 703 阅读 · 0 评论 -
C语言实现高精度(大位数)加法
1.位数的确定:假设c用来保存大数据a与大数据b的和,那么c的长度len= max(lena,lenb) + 12.进位处理:c[i] = a[i] + b[i]+jw;(jw为每轮进的位) jw = c[i]/10; c[i] = c[i]%10;3.删除前导0for(int i=len-1;i>=0;i--){ if(c[i]==0&&len>1) len--; else原创 2020-07-10 12:07:45 · 994 阅读 · 0 评论 -
Java实现快速排序
快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。思想:1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素;2.将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边;3.对左右两个分区重复以上步骤直到所有元素都是有序的。所以我是把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态。源码package com;im原创 2020-07-09 23:32:16 · 263 阅读 · 0 评论 -
Java实现归并排序
归并是将两个或多个存序记录序列合并成一个有序序列。归并方法有多种,一次对两个有序记录序列进行归并,称为路归并排序,也有三路归并排序及多路归并排序。本实例是二路归并排序,基本方法如下:(1) 将 n 个记录看成是 n 个长度为 1 的有序子表。(2) 将两两相邻时有序无表进行归并。(3) 重复执行步骤 (2) 直到归并成一个长度为 n 的有序表。源码package com;import java.util.Arrays;import java.util.Scanner;public cla原创 2020-07-09 23:14:30 · 199 阅读 · 0 评论 -
Java实现基数排序
基数排序和计数排序一样无需进行比较和交换,和桶排序一样利用分布和收集两种基本操作进行排序。基数排序是把每一个元素拆成多个关键字,一个关键字可以在每一个元素上同等的位置进行计数排序,一个元素拆成多个关键字可以看作是要进行几轮分桶,以一个元素最长的长度为准。基数排序可以看成多(单)关键字的排序,可以想象成桶排序那样分桶排序,也可以像计数排序那样归约化分治。基数排序的思想是将待排序序列中的每组关键字进行桶排序。例如整数序列[103, 9, 1,7,11,15, 25, 201, 209, 107, 5]上每个原创 2020-07-09 23:01:26 · 226 阅读 · 0 评论 -
Java实现插入排序
插入排序:文字描述过程:第1趟插入:将第2个元素插入前面的有序子序列,此时前面只有一个元素,当然是有序的第2趟比较:将第3个元素插入前面的有序子序列,前面的2个元素是有序的…第n-1趟比较:将第n个元素插入前面的有序子序列,前面n-1个元素是有序的源码package com;import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args原创 2020-07-09 22:43:41 · 193 阅读 · 0 评论 -
Java实现希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步原创 2020-07-09 22:37:34 · 168 阅读 · 0 评论 -
Java实现选择排序
基本思想及举例说明选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。第1轮 排序过程 (寻找第1小的数所在的位置)3 2 4 1(最初, min_index=1)3 2 4 1(3 > 2, 所以m原创 2020-07-09 22:28:45 · 250 阅读 · 0 评论 -
Java实现冒泡排序
冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。源码package com;import java.util.Arrays;import java.util.Scanner;public class Main { public static void原创 2020-07-09 22:21:31 · 260 阅读 · 0 评论 -
Java实现哈希表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。例如:给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。源码package com;import java.util.Scanner;im原创 2020-07-09 18:00:52 · 358 阅读 · 0 评论