• LeetCode725分隔链表


    题目链接

    https://leetcode-cn.com/problems/split-linked-list-in-parts/

    题解

    • 这题我做了好久
    • 该题抽象出来的话,就是要将n个物体分成k组,要求每组物体数量的差异不超过1。
    • 思路就是先均分成k组,每组n/k(忽略小数位)个元素,剩下了n%k个物体,就把剩下的n%k个物体均分放入n%k个组(在本题中是前n%k个组)。
    // Problem: LeetCode 725
    // URL: https://leetcode-cn.com/problems/split-linked-list-in-parts/
    // Tags: Linked List
    // Difficulty: Medium
    
    #include<vector>
    using namespace std;
    
    struct ListNode{
        int val;
        ListNode* next;
    };
    
    class Solution{
    private:
        int getLen(ListNode* root){
            int len = 0;
            while(root != nullptr){
                len++;
                root = root->next;
            }
            return len;
        }
    
    public:
        vector<ListNode*> splitListToParts(ListNode* root, int k) {
            vector<ListNode *> result;
            ListNode *temp = nullptr;
            // 遍历求链表长度
            int n = this->getLen(root);
            // 每个part至少quotient个结点
            int quotient = n / k;
            // 剩余remainder个结点,将其平均分配至前remainder个part
            int remainder = n % k;
            // 前remainder个part各quotient+1个结点,后k-remainder个结点各quotient个结点
            for (int i = 0; i < k; i++){
                // 存储该part的头结点
                result.push_back(root);
                // 该part中结点数量
                int partCount = remainder > 0 ? quotient + 1 : quotient;
                // 通过遍历,将root移动到下一个part,同时用temp保存该part的尾结点
                for (int j = 0; j < partCount; j++){
                    temp = root;
                    root = root->next;
                }
                // 断开该part中尾结点与下一part的连接
                if (temp != nullptr)
                    temp->next = nullptr;
                remainder--;
            }
            return result;
        }
    };
    

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    spring-boot-swagger2 使用手册
    mall整合Swagger-UI实现在线API文档
    MyBatis Generator 详解
    1046 划拳 (15分)
    1043 输出PATest (20分)
    1042 字符统计 (20分)
    1041 考试座位号 (15分)
    1040 有几个PAT (25分)
    1039 到底买不买 (20分)
    1038 统计同成绩学生 (20分)
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13411337.html
Copyright © 2020-2023  润新知