使用python解决的第一道算法题

本文介绍了作者初次使用Python解决算法问题的经历,通过一道关于输入整数和二元树并找出特定路径的题目,展示了Python语法的易学性和适用性。
摘要由CSDN通过智能技术生成

闲来无事玩玩python,发现和c、perl有很多相近之处,基本语法很容易就掌握了,刚好看到一算法题,就拿来练练手。

题目:输入一个整数和一棵二元树。

从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
     10 
     /   \  
   5   12  
  /        \  
4         7

则打印出两条路径:10, 12和10, 5, 7。


class Treenode:

    def __init__( self, data ):
        self._data = data
        self._left   = None
        self._right = None

    def __str__( self ):
        return str(self._data)

class Tree:

    def __init__( self ):
        self._rootNode = None

    def insertNode( self, value ):
        if self._rootNode is None:
            self._rootNode = Treenode(value)
        else:
            self.insertNodeHelper(self._rootNode, value)

    def insertNodeHelper( self, node, value ):
        if value < node._data:
            if node._left 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 目描述: 给定一个数组nums和一个数字target,请你使用 Python 编写一个函数,计算出 nums 有多少对数的和等于 target。 示例: nums = [1, 2, 3, 4, 5] target = 7 count_pairs(nums, target) 输出: 2 解释:(3, 4) 和 (2, 5) 这两对数的和都为 7。 算法思路: - 使用双重循环,遍历数组的每一个数字,并计算它和另一个数字的和。 - 如果和等于 target,就将计数器加 1。 代码实现: ``` def count_pairs(nums, target): count = 0 for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: count += 1 return count nums = [1, 2, 3, 4, 5] target = 7 print(count_pairs(nums, target)) ``` 运行结果: 2 ### 回答2: 使用Python编写上面的算法非常简单。下面是一个一种可能的实现: ```python def find_pairs(array, target_sum): pairs = [] num_dict = {} for num in array: complement = target_sum - num if complement in num_dict: pairs.append((num, complement)) num_dict[num] = True return pairs if __name__ == "__main__": array = [1, 2, 3, 4, 5, 6] target_sum = 7 result = find_pairs(array, target_sum) print(result) ``` 这段代码,我们定义了一个`find_pairs`函数,它接受一个数组`array`和一个目标和`target_sum`作为参数。我们首先创建一个空列表`pairs`用来存储找到的配对结果。然后,我们创建一个字典`num_dict`用来记录数组出现过的数字。 我们遍历数组的每个数字,对于每个数字,我们计算它的补数。如果补数已经在`num_dict`存在,说明找到了一对数字,我们将其添加到`pairs`列表。然后,将当前数字添加到`num_dict`,以备后面的数字查找。 最后,我们调用`find_pairs`函数,并传入示例数组`[1, 2, 3, 4, 5, 6]`和目标和`7`。该函数返回找到的所有配对,并存储在`result`变量。最后,我们打印`result`结果。 这个算法的时间复杂度是O(n),其n是数组的长度。 ### 回答3: 使用Python编写这道可以采用以下步骤: 1. 创建一个空列表`numbers`来存储用户输入的数字。 2. 使用一个循环,循环5次,每次从用户输入获取一个数字,并将其添加到`numbers`列表。 3. 创建一个变量`sum`,初始值为0,用于存储所有输入数字的总和。 4. 遍历`numbers`列表,将每个数字加到`sum`变量。 5. 计算平均值,将`sum`除以列表长度,得到平均值。 6. 创建一个变量`maximum`,初始值为列表的第一个数字。 7. 遍历`numbers`列表,对比每个数字与`maximum`的大小,如果找到更大的数,则更新`maximum`的值。 8. 输出总和、平均值和最大值。 以下是一个示例代码: ```python numbers = [] # 获取用户输入的数字并添加到列表 for i in range(5): num = float(input("请输入一个数字: ")) numbers.append(num) # 计算总和 sum = 0 for num in numbers: sum += num # 计算平均值 average = sum / len(numbers) # 找到最大值 maximum = numbers[0] for num in numbers: if num > maximum: maximum = num # 输出结果 print("总和为:", sum) print("平均值为:", average) print("最大值为:", maximum) ``` 代码使用循环来获取用户输入的数字,并将其存储在`numbers`列表。然后使用循环计算出列表所有数字的总和。接着计算平均值,即将总和除以数字数量。最后使用循环和if语句来找到列表的最大值。最后输出总和、平均值和最大值。这段代码可以实现这道目的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值