链表-求助Java算法,这两个算法问题有Java代码实现

问题描述

求助Java算法,这两个算法问题有Java代码实现
  1. 从N个元素集合里面随机抽取M个元素(M<N)。

C/C++:
void randomChoose(int*data, intn, int *result, int m);
Java:
void randomChoose(int data[], int result[]);

说明:
1.Data是待抽取的元素集合,n是data的长度,result是抽取的结果,m是结果集的长度。
2.同一个元素不能被反复抽取。
3.每个元素被抽取到的概率必须相同。
4.不需要自己写随机函数,C版本中允许使用rand()函数,java版本中允许使用Random对象
5.算法效率尽可能高
6.必须要有代码注释和算法说明。
例如:data里面的数据是{3, 4, 9}。n = 3, m = 2。此时result的可能输出结果有{3, 4},{3, 9},{4, 9},{4,3},{9, 3},{9, 4},每种可能的输出概率相同。
2.交换链表的奇偶顺序

函数说明:
swap函数交换链表第2i和第2i+1个元素(如果都有的话),并返回交换之后的链表。
示例:
交换前链表的顺序 交换后链表的顺序
1→2→3→4→5 ==> 2→1→4→3→5
1 ==> 1 (链表仅含一个元素)
1→2 ==> 2→1
==> (链表为空)

C/C++:
链表节点定义为:
struct node {
struct node *next;

};
struct node *swap(struct node *list);
Java:
链表节点定义为:
class Node {
public Node next;

}
Node swap(Node list)

注意点和要求如下:
0. swap函数返回新的链表指针
1. swap函数要求对节点的指针/引用进行操作(不得创建任何新的链表节点)
2. 不得使用任何库函数/API,如需使用类似功能, 请自行实现
3. 不得将链表转化为其他类型数据结构再进行交换,如数组等

解决方案

http://bylijinnan.iteye.com/blog/1468985

解决方案二:

下面一个问题用递归。

时间: 2024-11-03 19:04:29

链表-求助Java算法,这两个算法问题有Java代码实现的相关文章

两种JAVA实现短网址服务算法_java

短网址(Short URL) ,顾名思义就是看起来很短的网址.自从twitter推出短网址服务以后,各大互联网公司都推出了自己的短网址服务.短网址最大的优点就是短,字符少,便于发布.传播.复制和存储. 通过网上的搜索,感觉流传了2种短网址算法,一种是基于MD5码的,一种是基于自增序列的. 1.基于MD5码 : 这种算法计算的短网址长度一般是5位或者6位,计算过程中可能出现碰撞(概率很小),可表达的url数量为62 的5次方或6次方.感觉google(http://goo.gl),微博用的是类似这

算法 正则 java 交集-求算法 判断两个正则表达式是否存在交集

问题描述 求算法 判断两个正则表达式是否存在交集 求算法 判断两个正则表达式是否存在交集,最好java的 十分感谢

算法实现-请教JAVA如何得到两个数 之前的最小比例

问题描述 请教JAVA如何得到两个数 之前的最小比例 比如 5:10 = 1:2 45:60 = 3:4 自己心算一下就算出来了,写函数完全没有办法,高手请帮帮忙! 解决方案 数学问题,求两个数的最大公约数问题.多个数的最小比例,就求多个数的最大公约数. 然后每个数字除以最大公约数,就是他们的简化比例.最大公约数可用辗转相除法. 解决方案二: public class Test { public static void main(String[] args) { minScale(60, 15)

算法-java 随机生成 两个数 n1 n2

问题描述 java 随机生成 两个数 n1 n2 java 随机生成 两个数 n1 n2 要求: n1,n2 均要 小于 指定 数值 ,比如小于1000 n1 要能整除 n2 最好不用循环.... 大概一次要生成 1万条数据,越高效率越好, 越能装13越好 解决方案 public class Test { public static void main(String[] args) { Test test = new Test(); long start = System.currentTime

java实现Base64加密解密算法_java

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.

图解程序员必须掌握的Java常用8大排序算法_java

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,分享给大家一起学习. 分类1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看8种排序之间的关系: 1.直接插入排序 (1)基本思想:

Java虚拟机详解04----GC算法和种类【重要】

本文主要内容: GC的概念 GC算法  引用计数法(无法解决循环引用的问题,不被java采纳)     根搜索算法     现代虚拟机中的垃圾搜集算法: 标记-清除 复制算法(新生代) 标记-压缩(老年代)     分代收集 Stop-The-World   一.GC的概念: GC:Garbage Collection 垃圾收集 1960年 Lisp使用了GC Java中,GC的对象是Java堆和方法区(即永久区) 我们接下来对上面的三句话进行一一的解释: (1)GC:Garbage Colle

Java实现DES加解密算法解析_java

本文实例讲述了Java实现DES加解密算法解析.分享给大家供大家参考,具体如下:   简介: 数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款机(Automated Teller Machine,ATM)都使用DEA.它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用

图文讲解Java中实现quickSort快速排序算法的方法_java

相对冒泡排序.选择排序等算法而言,快速排序的具体算法原理及实现有一定的难度.为了更好地理解快速排序,我们仍然以举例说明的形式来详细描述快速排序的算法原理.在前面的排序算法中,我们以5名运动员的身高排序问题为例进行讲解,为了更好地体现快速排序的特点,这里我们再额外添加3名运动员.实例中的8名运动员及其身高信息详细如下(F.G.H为新增的运动员): A(181).B(169).C(187).D(172).E(163).F(191).G(189).H(182) 在前面的排序算法中,这些排序都是由教练主