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/

    欢迎讨论和交流!


  • 相关阅读:
    SpringMVC学习笔记----
    各种语言学习
    七步精通Python机器学习 转
    开源GIS有用
    sql 语句
    调试windows服务最简单的方法之一
    sqlserver2008 win7下安装 windows installer错误
    高德地图AmapSDKDemo运行
    google mapsDemo示例运行
    android开发环境搭建遇到的问题
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13411337.html
Copyright © 2011-2022 走看看