复习java集合中的练习
练习一:
给定一组连续的整数,例如:10,11,12,……,20,但其中缺失一个数字,试找出缺失的数字:
- 代码实现
package assemble;
import java.util.ArrayList;
import java.util.List;
/**
* @author Fcun
* @data 2022/2/20 --- 17:23
*/
public class test01 {
public static void main(String[] args) {
// 构造从start到end的序列:
final int start = 10;
final int end = 20;
List<Integer> list = new ArrayList<>();
for (int i = start; i <= end; i++) {
list.add(i);
}
// 随机删除List中的一个元素:
int removed = list.remove((int) (Math.random() * list.size()));
int found = findMissingNumber(start, end, list);
System.out.println(list.toString());
System.out.println("missing number: " + found);
System.out.println(removed == found ? "测试成功" : "测试失败");
}
static int findMissingNumber(int start, int end, List<Integer> list) {
/*
* 想要具体返回某一个状态值的话,应该初始化一开始的值,后面需要新值进行相应更新即可
* */
int a = 0;
for (int i = start; i <= end; i++) {
/*
* list.contains(i)
* - 观察元素中是否包含有相应的元素
* - 有则返回true 否则返回false
*
* */
if (!list.contains(i)) {
a = i;
break;
}
// return i;
}
/*
* 想要
* */
return a;
}
}
// 测试
[10, 11, 12, 13, 14, 15, 16, 17, 18, 20]
missing number: 19
测试成功
增强版:和上述题目一样,但整数不再有序,试找出缺失的数字:
import java.util.*;
public class Main {
public static void main(String[] args) {
// 构造从start到end的序列:
final int start = 10;
final int end = 20;
List<Integer> list = new ArrayList<>();
for (int i = start; i <= end; i++) {
list.add(i);
}
// 洗牌算法shuffle可以随机交换List中的元素位置:
Collections.shuffle(list);
// 随机删除List中的一个元素:
int removed = list.remove((int) (Math.random() * list.size()));
int found = findMissingNumber(start, end, list);
System.out.println(list.toString());
System.out.println("missing number: " + found);
System.out.println(removed == found ? "测试成功" : "测试失败");
}
static int findMissingNumber(int start, int end, List<Integer> list) {
int total = 0;
// 可以使用减法来求取到底是哪一个漏掉了
for(int i = start; i <= end; i++){
total += i;
}
for(Integer n : list){
total = total - n;
}
return total;
}
}
// 测试
[19, 13, 20, 15, 16, 18, 11, 10, 14, 17]
missing number: 12
测试成功