Java求n个整数中第二小的数。
相同的整数看成一个数。比如,有5个数分别是1,1,3,4,5,那么第二小的数就是3。
输入格式:
输入包含多组测试数据。输入的第一行是一个整数C,表示有C组测试数据;
每组测试数据的第一行是一个整数n,表示本组测试数据有n个整数(2<=n<=10),接着一行是n个整数(每个数均小于100)。
输出格式:
为每组测试数据输出第二小的整数,如果不存在第二小的整数则输出“NO”,每组输出占一行。
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
2
3
NO
利用了链表的思想
在链表的添加里经过了特殊的处理
package c;
/*
Author:Ma
许昌学院
*/
import java.util.Scanner;
/*
3
2
1 2
5
1 1 3 4 5
3
1 1 1
*/
public class Main {
public static void main(String[] args) {
Linked[] l;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
l = new Linked[n];
for (int i = 0; i < n; i++) {
l[i] = new Linked();
int count = sc.nextInt();
for (int j = 0; j < count; j++) {
int v = sc.nextInt();
l[i].add(v);
}
}
sc.close();
// 添加完毕进行取值打印
for (int i = 0; i < n; i++) {
if (i == n - 1) {
if (l[i].getLength() == 1) {
System.out.print("NO");
} else {
System.out.print(l[i].head.next.next.v);
}
} else {
if (l[i].getLength() == 1) {
System.out.println("NO");
} else {
System.out.println(l[i].head.next.next.v);
}
}
}
}
}
class Linked {
Node head = new Node(0);
// 计算长度
public int getLength() {
int length = 0;
Node temp = head.next;
while (temp != null) {
length++;
temp = temp.next;
}
return length;
}
//这段代码只是测试用的与结果输出无关
public void show() {
Node temp = head.next;
while (temp != null) {
System.out.println(temp.v + " ");
temp = temp.next;
}
}
// 添加元素
public void add(int i) {
if (head.next == null) {
head.next = new Node(i);
return;
}
Node temp = head;
boolean flag = false;
while (true) {
// 找到头没有找到,最大的那一个
if (temp.next == null) {
break;
}
if (temp.next.v > i) {
break;
} else if (temp.next.v == i) {
flag = true;
break;
}
temp = temp.next;
}
if (!flag) {
Node node = new Node(i);
node.next = temp.next;
temp.next = node;
}
}
}
class Node {
Integer v;
Node next;
public Node(Integer i) {
v = i;
}
}