三道leetcode题&一个带权有向图的ADT的python实现【3.22】

本文介绍了两个LeetCode题目,包括将非零整数数组加一的操作及寻找最大和的连续子数组。针对加一操作,文章提供了解题思路;对于最大子数组和问题,讨论了基础解法。此外,还提及了如何将无权有向图转换为带权有向图,提出使用字典套字典的数据结构作为解决方案。

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

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
我的解法

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        num = digits[0]
        for i in range(len(digits) - 1):
            j = i + 1
            num = num * 10 + digits[j]
        num1 = num + 1
        result = []
        for i in range(len(digits)):
            result.append(num1 % 10)
            num1 = int(num1 / 10)
        if num1==1:
            result.append(1)
        return list(reversed(result))

我的小垃圾解法。。。解了一个小时,但是我还是很开心肿么回事
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
大神解法

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res=nums[0]
        sum=0
        for i in range(len(nums)):
            if sum>0:
                sum+=nums[i]
            else:
                sum=nums[i]
            res=max(sum,res)
        return res

还有一个

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_sum = sum(nums)
        for i in range(len(nums)-1):
        	for j in range(len(nums)-1):
        		max_num=max(max_sum,sum(nums[i:j]))
        return max_num

给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: “Hello World”
输出: 5

import re
class Solution(object):
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        #rt = re.findall('[a-zA-Z]+', s)
        #if rt==[]:
            #return 0
        s=s.strip(" ")
        L=s.split()
        return len(L[-1])

注释了的是我原来的解法,最后发现去除空格就行!!!
今天还改了一个有向图变成带权的。。。

class Node(object):
    def __init__(self, name):
        self.name = name

    @staticmethod
    def get_name(obj):
        if isinstance(obj, Node):
            return obj.name
        elif isinstance(obj, str):
            return obj
        return ''

    def __eq__(self, obj):
        return self.name == self.get_name(obj)

    def __repr__(self):
        return self.name

    def __hash__(self):
        return hash(self.name)

    def __ne__(self, obj):
        return self.name != self.get_name(obj)

    def __lt__(self, obj):
        return self.name < self.get_name(obj)

    def __le__(self, obj):
        return self.name <= self.get_name(obj)

    def __gt__(self, obj):
        return self.name > self.get_name(obj)

    def __ge__(self, obj):
        return self.name >= self.get_name(obj)

    def __bool__(self):
        return self.name

class Weight(object):
    def __init__(self, name):
        self.name = name

    @staticmethod
    def get_name(obj):
        if isinstance(obj, Node):
            return obj.name
        elif isinstance(obj, str):
            return obj
        return ''

    def __eq__(self, obj):
        return self.name == self.get_name(obj)

    def __repr__(self):
        return self.name

    def __hash__(self):
        return hash(self.name)

    def __ne__(self, obj):
        return self.name != self.get_name(obj)

    def __lt__(self, obj):
        return self.name < self.get_name(obj)

    def __le__(self, obj):
        return self.name <= self.get_name(obj)

    def __gt__(self, obj):
        return self.name > self.get_name(obj)

    def __ge__(self, obj):
        return self.name >= self.get_name(obj)

    def __bool__(self):
        return self.name
class DirectedWeightedEdge(object):
    def __init__(self, node_from, node_to,weight):
        self.nf = node_from
        self.nt = node_to
        self.wt = weight
    def __eq__(self, obj):
        if isinstance(obj, DirectedWeightedEdge):
            return obj.nf == self.nf and obj.nt == self.nt and obj.wt == self.wt
        return False

    def __repr__(self):
        return '({0} ->{1} {2})'.format(self.nf, self.nt,self.wt)
class DirectedWeightGraph(object):
    def __init__(self, load_dict={}):
        self.nodes = []
        self.edges = []
        self.weights = []
        self.adjmt = {}
        if load_dict and type(load_dict) == dict:
            for v,method in load_dict.items():
                node_from = self.add_node(v)
                self.adjmt[node_from]={}
                for w,n in method.items():
                    node_to = self.add_node(n)
                    weight = self.add_weight(w)
                    self.adjmt[node_from][weight]=node_to
                    self.add_edge(v,n,w)

                # self.adjmt[node_from][method] = []
                # for w in self.adjmt[node_from].values():
                #     for n in self.adjmt[node_from].values():
                #         node_to = self.add_node(n)
                #         self.adjmt[node_from].append(node_to)
                #         self.add_edge(v, n, k)

    def add_node(self, node_name):
        try:
            return self.nodes[self.nodes.index(node_name)]
        except ValueError:
            node = Node(node_name)
            self.nodes.append(node)
            return node
    def add_weight(self, weight_name):
        try:
            return self.weights[self.weights.index(weight_name)]
        except ValueError:
            weight = Weight(weight_name)
            self.weights.append(weight)
            return weight
    def add_edge(self, node_name_from, node_name_to,weight):
        try:
            node_from = self.nodes[self.nodes.index(node_name_from)]
            node_to = self.nodes[self.nodes.index(node_name_to)]
            edge_weight = self.weights[self.weights.index(weight)]
            self.edges.append(DirectedWeightedEdge(node_from, node_to,edge_weight))
        except ValueError:
            pass
if __name__ == '__main__':
    g=DirectedWeightGraph({'LoginPage':{
                                            'login':'HomePage',
                                            'other':'ErrorPage',
                                        },
                            'HomePage':{
                                            'goto_user':'UserPage',
                                            'goto_good':'GoodPage',
                            }

    })
    print(g.edges)

字典套字典吧,还要学习的好多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值