zoukankan      html  css  js  c++  java
  • Leetcode 725. 分隔链表

    给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。

    每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。

    这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。

    返回一个符合上述规则的链表的列表。

    举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]

    示例 1:

    输入:
    root = [1, 2, 3], k = 5
    输出: [[1],[2],[3],[],[]]
    解释:
    输入输出各部分都应该是链表,而不是数组。
    例如, 输入的结点 root 的 val= 1, root.next.val = 2, oot.next.next.val = 3, 且 root.next.next.next = null。
    第一个输出 output[0] 是 output[0].val = 1, output[0].next = null。
    最后一个元素 output[4] 为 null, 它代表了最后一个部分为空链表。
    示例 2:

    输入:
    root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], k = 3
    输出: [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
    解释:
    输入被分成了几个连续的部分,并且每部分的长度相差不超过1.前面部分的长度大于等于后面部分的长度。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/split-linked-list-in-parts
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    //平均每项有n / k个元素,且前n % k项比平均个数多少一个
    //使用cut函数每次从原链表中切出相应个数的结点 放入res
    class Solution
    {
    public:
        //返回下一个开始的结点
        ListNode* cut(ListNode* start, int size)
        {
            if (!size)return NULL;
            ListNode* p = start;
            while (--size && p)
            {
                p = p->next;
            }
            if (!p)return NULL;
            ListNode* res = p->next;
            p->next = NULL;
            return res;
        }
        //每部分有n/k个结点 前n%k个结点比n/k个结点多一个结点
        vector<ListNode*> splitListToParts(ListNode* root, int k)
        {
            vector<ListNode*> res;
            int n = 0;
            ListNode* p = root;
            while (p) { n++; p = p->next; }
            int size = n / k;
            int add_size = n % k;
            ListNode* start=root,*next_start=NULL;
            for (int i = 0; i < k; i++)
            {
                int cut_size=size;
                if (add_size > 0) { cut_size++; add_size--; }
                next_start = cut(start, cut_size);
                res.push_back(start);
                start = next_start;
            }
            return res;
        }
    };
  • 相关阅读:
    085 Maximal Rectangle 最大矩形
    084 Largest Rectangle in Histogram 柱状图中最大的矩形
    083 Remove Duplicates from Sorted List 有序链表中删除重复的结点
    082 Remove Duplicates from Sorted List II 有序的链表删除重复的结点 II
    081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||
    080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II
    079 Word Search 单词搜索
    078 Subsets 子集
    bzoj2326: [HNOI2011]数学作业
    bzoj2152: 聪聪可可
  • 原文地址:https://www.cnblogs.com/lancelee98/p/13224318.html
Copyright © 2011-2022 走看看