判断回旋镖、判断数组是否单调题目解析

3 阅读3分钟

一、判断回旋镖 解题思路:

首先需要理解回旋镖的定义:就是要三点不在一条直线上,并且这三个点互不相同。 三点不在一条直线上可以用set,map,tuple这三个实现,共线可以通过计算任意两点的斜率判断。

下面给出代码: ``

def solution(points: list) -> bool:
    # write code here
    res=set(map(tuple,points))
    if len(res)!=3:
        return False
    x1,y1=points[0]
    x2,y2=points[1]
    x3,y3=points[2]

    if (y2-y1)*(x3-x2)==(y3-y2)*(x2-x1):
        return False
    return True

if __name__ == '__main__':
    print(solution(points=[[1, 1], [2, 3], [3, 2]]) == True)
    print(solution(points=[[1, 1], [2, 2], [3, 3]]) == False)
    print(solution(points=[[0, 0], [1, 1], [1, 0]]) == True)

算法步骤

  1. 检查点是否相同

    • 首先需要确保三个点互不相同。可以通过将点转换为元组并使用集合(set)来去重,然后检查集合的长度是否为3。
  2. 检查三点是否共线

    • 如果三点共线,则它们不能构成回旋镖。可以通过计算斜率来判断三点是否共线。为了避免除零错误,通过交叉相乘来比较斜率。

难点:

关于set(map(tuple, points)): set(map(tuple, points)) 是一个Python表达式,用于将列表中的点转换为元组,并使用集合(set)来去重。

  1. map(tuple, points) :

    • points 是一个包含多个点的列表,每个点是一个包含两个元素的列表(例如 [x, y])。
    • map(tuple, points) 将 points 中的每个点转换为元组。例如,[[1, 1], [2, 3], [3, 2]] 会被转换为 [(1, 1), (2, 3), (3, 2)]
  2. set(...) :

    • set 是一个集合数据结构,它自动去除重复元素。
    • 将 map(tuple, points) 的结果传递给 set,会生成一个包含唯一元组的集合。例如,[(1, 1), (2, 3), (3, 2)] 会被转换为 {(1, 1), (2, 3), (3, 2)}

关于计算斜率: 为了避免除零错误,可以通过交叉相乘来判断斜率是否相同 自此,完结撒花!

二、判断数组是否单调 解题思路: 首先要知道什么是单调数组? 单调数组有两种情况:

  1. 单调递增:数组中的每个元素都大于或等于前一个元素。
  2. 单调递减:数组中的每个元素都小于或等于前一个元素。 由于只需要遍历数组并比较相邻元素,因此不需要额外的数据结构。

算法步骤:

  1. 初始化标志变量:使用两个布尔变量 is_up 和 is_down,分别表示数组是否单调递增和单调递减。初始时,假设数组是单调的,因此将这两个变量都设为 True

  2. 遍历数组:从第二个元素开始,遍历数组中的每个元素,并与前一个元素进行比较:

    • 如果当前元素小于前一个元素,则数组不是单调递增的,将 is_up 设为 False
    • 如果当前元素大于前一个元素,则数组不是单调递减的,将 is_down 设为 False
  3. 返回结果:遍历结束后,只要 is_increasing 或 is_decreasing 中有一个为 True,就说明数组是单调的,返回 True;否则返回 False。 下面给出代码实现: ``

def solution(nums: list) -> bool:
    # write code here
    is_up,is_down=True,True
    for i in range(1,len(nums)):
        if nums[i]<nums[i-1]:
            is_up=False
        if nums[i]>nums[i-1]:
            is_down=False
    return is_up or is_down

    
    return False

if __name__ == '__main__':
    print(solution(nums=[1, 2, 2, 3]) == True)
    print(solution(nums=[6, 5, 4, 4]) == True)
    print(solution(nums=[1, 3, 2, 4, 5]) == False)