zoukankan      html  css  js  c++  java
  • 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/

    欢迎讨论和交流!


  • 相关阅读:
    jQuery之元素操作及事件绑定
    JS中常遇到的浏览器兼容问题和解决方法
    九九乘法表
    全选复习
    css基本知识
    js数组
    Spark常见错误问题汇总
    被问懵逼的Kafka面试题
    被问懵逼的数仓面试
    Flink模拟项目: 订单支付实时监控
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13411337.html
Copyright © 2011-2022 走看看