Java各类技能知识点学习链接大全:十、算法数据结构

以下内容大多是学习链接,他人整理,个人收藏以便复习,同时归纳分享出来(如有不妥,原作者可随时联系本人删除,感谢!)

十、算法数据结构

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()));//降序排序
            }
});

找出文本中出现频率最高的10个单词(java实现) - 若非菲lrr - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值