725. 分隔链表

本文介绍了如何使用Python处理链表,通过计算每个部分的大小,实现将链表分成k个部分的算法,并提供了getPart函数来截取链表的前n个节点。关键步骤包括确定基本部分大小和余数分配,以及优化代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题解

关键点在于k<size的时候怎么按照题目正确划分每个part的数量
size=10,k=3的时候,得到4,3,3的组合
size=14,k=3的时候,得到4,4,3,3的组合
容易得到规律,basic=size//k是每个划分区域的基础大小,然后初始化我们让每个part大小为basic,然后我们把size%k的数量,依次给前面的每个part加1,这样刚好是正确的数量

然后我们需要实现一个摘下链表前n个结点的代码

    # 取得一段链表的前n个结点,并且返回截取后的新链表
    def getPart(self,head,n):
        if not head:
            return head,head
        

        t = head
        # 尝试取出n个结点,有足够的结点可以取
        while n-1 and head.next:
            n -= 1
            head = head.next
            
        nh = head.next
        head.next = None
        # 取出的链表部分和新的首结点
        return t,nh

然后我们就可以得到代码

class Solution:
    # 取得一段链表的前n个结点,并且返回截取后的新链表
    def getPart(self,head,n):
        if not head:
            return head,head

        t = head
        # 尝试取出n个结点
        while n-1 and head.next:
            n -= 1
            head = head.next
            
        nh = head.next
        head.next = None
        # 取出的链表部分和新的首结点
        return t,nh

    def splitListToParts(self, head: ListNode, k: int) -> List[ListNode]:
        # 统计size
        size = 0
        p = head
        while p:
            p = p.next
            size += 1
        
        ans = []
        # 得到每个part的大小
        basic = size//k
        ret = size%k
        num = [basic]*k
        ind = 0
        while ret:
            num[ind]+=1
            ind += 1
            ret -= 1    

        # 开始遍历取链表    
        ind = 0
        while head:
            t,head = self.getPart(head,num[ind])
            ind += 1
            ans.append(t)

        # 链表已经取完了,剩下全部填充None
        while ind<len(num):
            ans.append(None)
            ind+=1

        return ans

进一步的,可以简化取part部分的代码

class Solution:
    # 取得一段链表的前n个结点,并且返回截取后的新链表
    def getPart(self,head,n):
        if not head:
            return head,head

        t = head
        # 尝试取出n个结点
        while n-1 and head.next:
            n -= 1
            head = head.next
            
        nh = head.next
        head.next = None
        # 取出的链表部分和新的首结点
        return t,nh

    def splitListToParts(self, head: ListNode, k: int) -> List[ListNode]:
        # 统计size
        size = 0
        p = head
        while p:
            p = p.next
            size += 1
        
        ans = []
        # 得到每个part的大小
        basic = size//k
        ret = size%k
        num = [basic]*k
        for i in range(ret):
            num[i] += 1

        # 开始遍历取链表    
        ind = 0
        while head:
            t,head = self.getPart(head,num[ind])
            ind += 1
            ans.append(t)

        # 链表已经取完了,剩下全部填充None
        while ind<len(num):
            ans.append(None)
            ind+=1

        return ans
内容概要:本文详细阐述了DeepSeek大模型在服装行业的应用方案,旨在通过人工智能技术提升服装企业的运营效率和市场竞争力。文章首先介绍了服装行业的现状与挑战,指出传统模式难以应对复杂的市场变化。DeepSeek大模型凭借其强大的数据分析和模式识别能力,能够精准预测市场趋势、优化供应链管理、提升产品设计效率,并实现个性化推荐。具体应用场景包括设计灵感生成、自动化设计、虚拟试衣、需求预测、生产流程优化、精准营销、智能客服、用户体验提升等。此外,文章还探讨了数据安全与隐私保护的重要性,以及技术实施与集成的具体步骤。最后,文章展望了未来市场扩展和技术升级的方向,强调了持续优化和合作的重要性。 适用人群:服装行业的企业管理层、技术负责人、市场和销售团队、供应链管理人员。 使用场景及目标:①通过市场趋势预测和用户偏好分析,提升设计效率和产品创新;②优化供应链管理,减少库存积压和生产浪费;③实现精准营销,提高客户满意度和转化率;④通过智能客服和虚拟试衣技术,提升用户体验;⑤确保数据安全和隐私保护,建立用户信任。 阅读建议:此资源不仅涵盖技术实现的细节,还涉及业务流程的优化和管理策略的调整,建议读者结合实际业务需求,重点关注与自身工作相关的部分,并逐步推进技术的应用和创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值