极客时间算法训练营 Week03
 作者:jjn0703
- 2021 年 12 月 05 日
 本文字数:1147 字
阅读完需:约 4 分钟
本周是课程的第三周,我们学习了递归、分治、树、图的遍历等算法。
其中,树是学习的关键点,包括树的遍历、前中后序遍历的特点。树按层遍历、按深度优先方式遍历等。
作业题目如下:
23. Merge k Sorted Lists
class Solution {
    public ListNode mergeKLists(ListNode[] lists){        if(lists.length == 0)            return null;        if(lists.length == 1)            return lists[0];        if(lists.length == 2){           return mergeTwoLists(lists[0],lists[1]);        }
        int mid = lists.length/2;        ListNode[] l1 = new ListNode[mid];        for(int i = 0; i < mid; i++){            l1[i] = lists[i];        }
        ListNode[] l2 = new ListNode[lists.length-mid];        for(int i = mid,j = 0; i < lists.length; i++, j++){            l2[j] = lists[i];        }
        return mergeTwoLists(mergeKLists(l1), mergeKLists(l2));
    }      private ListNode mergeTwoLists(ListNode l1, ListNode l2) {        if (l1 == null) return l2;        if (l2 == null) return l1;
        ListNode head = null;        if (l1.val <= l2.val){            head = l1;            head.next = mergeTwoLists(l1.next, l2);        } else {            head = l2;            head.next = mergeTwoLists(l1, l2.next);        }        return head;    }}复制代码
 47. Permutations II
class Solution {    private List<List<Integer>> res = new ArrayList<>();    private Set<String> set = new HashSet<>();
    public List<List<Integer>> permuteUnique(int[] nums) {        // 回溯        backtrack(nums, new ArrayList<>());        return res;    }
    private void backtrack(int[] nums, List<Integer> idxList) {        // 如果所有元素都排列过        if (idxList.size() == nums.length) {            List<Integer> list = new ArrayList<>();            // 通过索引list,构建元素list            for (int index : idxList) list.add(nums[index]);                if (!set.contains(list.toString())) {                    set.add(list.toString());                    res.add(list);                }            return;        }        for (int i = 0; i < nums.length; i++) {            // 如果nums[i]已经排序过,则跳过            if (idxList.contains(i)) continue;            idxList.add(i);            backtrack(nums, idxList);            idxList.remove(idxList.size() - 1);        }    }}复制代码
 划线
评论
复制
发布于: 1 小时前阅读数: 7
jjn0703
关注
Java工程师/终身学习者 2018.03.26 加入
USTC硕士/健身健美爱好者/Java工程师.











    
评论