以下内容大多是学习链接,他人整理,个人收藏以便复习,同时归纳分享出来(如有不妥,原作者可随时联系本人删除,感谢!)
十、算法数据结构
1、LeetCode题解:LeetCode之Array题目汇总 - 作业部落 Cmd Markdown 编辑阅读器
2、反转单项链表:Java单链表反转 详细过程_pan_jinquan的博客-优快云博客_java反转链表
3、二叉树遍历、广度优先 深度优先 (非递归方式):二叉树的深度优先和广度优先遍历(超详细步骤)(java实现)_XTAOTWO的博客-优快云博客_二叉树深度优先遍历
4、不使用临时变量交换两个数
public static void swap(int a, int b) {
a = a ^ b;
b = b ^ a;
a = a ^ b;
System.out.println(a + " " + b);
}
5、合并两个链表:
java实现两个有序单链表合并_田维常-优快云博客_java合并两个有序链表
6、合并两个有序的List集合:
两个有序list合并_abcdef00001111234的博客-优快云博客
7、快速排序:
视频讲解:快速排序算法_哔哩哔哩_bilibili
代码:快速排序 - 简书
public int division(int[] list, int left, int right) {
// 以最左边的数(left)为基准
int base = list[left];
while (left < right) {
// 从序列右端开始,向左遍历,直到找到小于base的数
while (left < right && list[right] >= base)
right--;
// 找到了比base小的元素,将这个元素放到最左边的位置
list[left] = list[right];
// 从序列左端开始,向右遍历,直到找到大于base的数
while (left < right && list[left] <= base)
left++;
// 找到了比base大的元素,将这个元素放到最右边的位置
list[right] = list[left];
}
// 最后将base放到left位置。此时,left位置的左侧数值应该都比left小;
// 而left位置的右侧数值应该都比left大。
list[left] = base;
return left;
}
8、冒泡排序:经典排序算法(1)——冒泡排序算法详解_渴望,就奋力追寻...-优快云博客_冒泡算法
9、二分查找法:
//array 是一个有序数组
public static int startSearch(int array[], int searchKey) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
// 以下写法相当于 (low + high) / 2
// 防止high+low过大溢出,而且移位更高效
int mid = low + ((high-low)>>2);
if (searchKey > array[mid]) {
// 如果大于mid,则放弃mid和上(左)半部分
low = mid + 1;
} else if (searchKey < array[mid]) {
// 如果小于mid,则放弃mid和下(右)半部分
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
10、统计每个单词出现的次数:
Map<String,Integer> tm = new HashMap<String,Integer>();
// key当做单词,value当做出现次数
if(!tm.containsKey(s)){
tm.put(s,1);
}else{
tm.put(s,tm.get(s)+1);
}
11、怎么获取一个文件中单词出现的最高频率:
可以参考上面的题7中,同样存放到一个Map里面,但是需要对这个map按照value排序,
我们知道,有现成的按照key排序的Map,就是TreeMap,但是如果需要按照value排序的话,
那么就需要重写Comparator方法,如下,是降序排序,排序后那么取出前面第n个数据,就是前n次数的单词了,
正常情况下Map是不可以使用Collections.sort()方法进行排序的,不过可以将Map转换成list之后再进行排序:
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>()
{
public int compare(Entry<String,Integer> o1,Entry<String,Integer> o2)
{
return (o2.getValue().compareTo(o1.getValue()));//降序排序
}
});