求助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. 不得将链表转化为其他类型数据结构再进行交换,如数组等

2个回答

下面一个问题用递归。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问