📌  相关文章
📜  给定链表的所有节点的两个最近的完全平方之间的距离之和(1)

📅  最后修改于: 2023-12-03 15:27:36.121000             🧑  作者: Mango

给定链表的所有节点的两个最近的完全平方之间的距离之和

题目描述

给定一个单向链表,求出链表的所有节点的两个最近的完全平方之间的距离之和。

例如,链表为 [1, 2, 3, 4, 5, 6, 7, 8, 9],节点 2 和节点 4 的距离为 1,节点 4 和节点 9 的距离为 1,节点 2 和节点 9 的距离为 2,因此距离之和为 4。

思路

首先,我们需要计算出一个数是否是完全平方数,并且计算出这个数的平方根。

然后,我们遍历链表,对于每个节点,向后遍历找到下一个完全平方数,计算两者之间的距离,并将这个距离加入到总距离中。

代码实现
import math

def is_perfect_square(num):
    """
    判断一个数是否是完全平方数,并返回它的平方根
    """
    sqrt = int(math.sqrt(num))
    return sqrt*sqrt == num, sqrt

def distance(node, next_node):
    """
    计算两个节点之间的距离
    """
    return next_node - node

def sum_of_distances(nums):
    """
    给定一个单向链表,求出链表的所有节点的两个最近的完全平方之间的距离之和
    """
    total_distance = 0
    i = 0
    while i < len(nums):
        is_square, sqrt = is_perfect_square(nums[i])
        if is_square:
            j = i + 1
            while j < len(nums):
                is_next_square, next_sqrt = is_perfect_square(nums[j])
                if is_next_square:
                    total_distance += distance(sqrt, next_sqrt)
                    break
                j += 1
            i = j
        else:
            i += 1
    return total_distance
测试样例
# 测试样例
print(sum_of_distances([1, 2, 3, 4, 5, 6, 7, 8, 9])) # 4
print(sum_of_distances([16, 17, 18, 19, 20, 21, 22, 23, 24, 25])) # 9
print(sum_of_distances([1, 4, 9, 16, 25])) # 0
print(sum_of_distances([1, 1, 1, 1])) # 0