1.排序
在比赛中尽量使用Java自带的排序算法,此类算法平均效率比冒泡排序和选择排序算法高,也可以减少很多写代码的时间。
import java.util.Arrays;
int a[]={1,2,3,4,5};
Arrays.sort(a);
也可以根据题目要求写效率更高的桶排序、归并排序等。
2.全排序
全排序就是从n个元素当中选出m个元素,按照一定的顺序排列。
当m=n时,就叫做全排列。
而想要实现全排列可以分为两部分:
(1)记录第一个元素
(2)对剩下的元素排序
以【1,2,3】为例
1【2,3】的全排列有
1,2【3】的全排列1,2,3;
1,3【2】的全排列1,3,2;
同理,
2【1,3】的全排列有
2,1,3;
2,3,1;
3【1,2】的全排列有
3,1,2;
3,2,1;
所以可以创建一个方法fullSort接收三个参数:一个数组arr[],一个起始位置start,一个终止位置end。
方法共分两步走:
(1)记录第一位元素
数组arr从start到end的所有记录都可以出现在第一个位置,直接写一个for循环,考虑所有的情况。在for循环中,swap方法就是交换i和start位置的数,保证当前i指向的记录出现在第一个位置,也就是start指向的位置。
(2)剩余元素接着排序
这就是一个递归函数的调用,只需要修改起始位置,也就是start+1,因为start的位置已经放了记录,所以只需要继续做从start+1到end的全排列即可。
(3)swap方法的作用
因为数组传递的是地址,所以所有的修改对所有人都是共享的,因此为了保证每一次的交换不会对下一次的交换产生影响,要重新交换一下位置,也就是复原,不然对下一次的交换就有影响了。
递归的终止条件就是当start==end,也就是只有一个记录需要做全排列,也就是到了最后一个记录,这就是全排列的一种情况,输入本次的记录,也就是数组arr即可。(同时可以直接打印出来)
完整代码见下:
public class Main {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4 };
fullSort(arr, 0, arr.length - 1);
}
public static void fullSort(int[] arr, int start, int end) {
// 递归终止条件
if (start == end) {
for (int i : arr) {
System.out.print(i);
}
System.out.println();
return;
}
for (int i = start; i <= end; i++) {
swap(arr, i, start);
fullSort(arr, start + 1, end);
swap(arr, i, start);
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
全排列还可以再定义一个数组visit[],用来判定元素中元素是否已经被排序的方法来实现。
3.数据结构
常用API如下:
(1)ArrayList类
ArrayList
sites.add("Runoob");//添加元素
System.out.println(sites.get(1)); // 访问第二个元素
sites.set(1, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
sites.remove(3); // 删除第四个元素,都写的是下标位置
System.out.println(sites.size());//计算ArrayList中元素个数
sites.contains();//判断元素是否在arraylist中
(2)linkedList类
linkedList
sites.add("Google");
其他获取、移除操作和第一类相似。
(3)HashMap类
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射
HashMap
Sites.put(1, "Google");
效果:1=Google;
我们可以使用 get(key) 方法来获取 key 对应的 value:
System.out.println(Sites.get(3));
Sites.remove(4);//删除对应元素
全部删除用clear();
4.String和StringBuffer类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder sb = new StringBuilder(10);
sb.append("Runoob.."); //添加
sb.append("!");
sb.insert(8, "Java");//插入位置和插入元素
sb.delete(5,8);//要删除的位置范围
String[] split(String regex) //根据给定正则表达式的匹配拆分此字符串。
String substring(int beginIndex, int endIndex) //返回一个新字符串,它是此字符串的一个子字符串。(包括beginIndex,不包括endIndex)
char[] toCharArray() //将此字符串转换为一个新的字符数组。
String valueOf(int i) //返回 int参数的字符串 int形式。
5.取模
//如保留后四位数,则需要%10000(保留几位,1的后面就跟几个0)



