LeetCode|1502.判断能否形成等差数列

LeetCode习题答案汇总

题目:
给你一个数字数组 arr 。

如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。

如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。

示例 1:

输入:arr = [3,5,1]
输出:true
解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。
示例 2:

输入:arr = [1,2,4]
输出:false
解释:无法通过重新排序得到等差数列。

提示:

2 <= arr.length <= 1000
-10^6 <= arr[i] <= 10^6

思路:首先将原数组进行排序,然后通过循环操作判断相邻两项的差的绝对值是否等于之前的,用集合即可。

代码:

class Solution:
    def canMakeArithmeticProgression(self, arr: List[int]) -> bool:
        nums = set()
        arr.sort()
        for i in range(len(arr)-1):
            a = abs(arr[i+1]-arr[i])
            nums.add(a)
            if len(nums) > 1:
                return False
        return True

结果:
在这里插入图片描述

### LeetCode 迭代法 解题教程 #### 使用迭代法解决问题的优势 迭代法是一种通过重复执行一系列操作来逐步接近解决方案的方法。相比于递归,迭代通常占用更少的空间资源,因为不需要额外的栈空间用于函数调用。 #### 实例分析:有效完全平方数判断 对于给定一个正整数`num`,要验证其是否为某个整数的平方,可以采用等差数列累加的方式来进行判定。如果一个数字能被表示成连续奇数之和,则该数字即为某整数的平方[^1]。 ```cpp class Solution { public: bool isPerfectSquare(int num) { if(num < 2) return true; int sub=1; while(num > 0){ num -= sub; sub += 2; } return num == 0; } }; ``` 此算法利用了数学性质,当且仅当存在这样的序列使得最终剩余量恰好等于零时,原始数值才是完美平方数。 #### 链表反转案例研究 另一个常见的应用场景是在处理单向链表结构上的节点顺序颠倒问题。下面给出了一种基于迭代方式实现链表反转的具体做法: 考虑初始状态下的链表形式 `1->2->3->4->5->NULL` ,目标是要将其转换为目标形态 `5->4->3->2->1->NULL` 。为了达成这一目的,程序会遍历整个列表,并逐个调整指针方向指向先前访问过的元素直到完成全部节点的方向改变过程[^3]。 ```cpp class Solution{ public: ListNode* reverseList(ListNode* head){ ListNode *curr = head, *prev = NULL; while(curr != NULL){ ListNode *temp = curr->next; // 记录下一个位置 curr->next = prev; // 修改当前节点的 next 指向前一节点 prev = curr; // 移动 prev 到当前位置 curr = temp; // 继续移动到下一位置 } return prev; // 返回新的头部 } }; ``` 这段代码展示了如何有效地运用三个辅助变量 (`curr`, `prev`, 和临时存储器 `temp`) 来安全地逆转链表中的链接关系而不丢失任何数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值