力扣代码学习日记八

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • 代码

Problem: 1502. 判断能否形成等差数列

思路

给你一个数字数组 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

解题方法

  1. 首先,找出数组中的最小值和最大值。
  2. 然后,计算等差数列的公差 d。为了得到公差,我们可以使用公式 d = (max - min) / (n - 1),其中 n 是数组中的元素数量。
  3. 创建一个新的数组,从最小值开始,每次增加公差 d,直到达到最大值,应该能得到 n 个元素
  4. 如果新数组的长度与原始数组的长度不同,或者有任何一个元素在原始数组中的出现次数与新数组中不匹配,那么返回 false
  5. 否则,返回 true

复杂度

时间复杂度:

  1. 找出最小值和最大值: 这需要遍历数组一次,所以时间复杂度为 O(n),其中 n 是数组中的元素数量。
  2. 计算公差: 这是一个常数时间操作,所以时间复杂度为 O(1)。
  3. 生成等差数列的集合: 这需要遍历 n 个元素一次,每次添加操作是 O(1),因此总时间复杂度为 O(n)。
  4. 比较两个集合: 在最坏的情况下,每个元素都需要比较一次,所以时间复杂度为 O(n)。

综上所述,总的时间复杂度为 O(n) + O(1) + O(n) + O(n) = O(n)。

空间复杂度:

  1. 存储最小值和最大值: 这是常数空间,因此空间复杂度为 O(1)。
  2. 生成等差数列的集合: 在最坏的情况下,会生成一个与原数组等大的集合,因此空间复杂度为 O(n)。
  3. 比较集合时使用的空间: 如果使用了集合进行比较,则可能需要额外的空间来存储第二个集合,这也是 O(n)。

因此,总的空间复杂度是 O(n) + O(n) = O(n)。

代码

class Solution(object):def canMakeArithmeticProgression(self, arr):""":type arr: List[int]:rtype: bool"""min_arr = min(arr) #最小数max_arr = max(arr) #最大数n = len(arr) #数组长度if (max_arr - min_arr) % (n - 1) !=0: #差是否能整除return Falsed = (max_arr - min_arr) // (n - 1) #计算差值if d == 0:return Trueexpecte_set= set(min_arr + d * i for i in range(n)) #生成新数组return expecte_set == set(arr) #两个数组进行比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis持久化:RDB和AOF

RDB&#xff08;Redis DataBase&#xff09; AOF&#xff08;Append Only File&#xff09; AOF重写 RDB AOF 混合持久化 开启 RDB 持久化&#xff1a; RDB 是默认启用的&#xff0c;但你可以检查并设置相关参数以满足你的需求&#xff0c;例如更改保存间隔时间、数据库大…

接口自动化测试框架搭建:基于python+requests+pytest+allure实现

众所周知&#xff0c;目前市面上大部分的企业实施接口自动化最常用的有两种方式&#xff1a; 1、基于代码类的接口自动化&#xff0c;如&#xff1a; PythonRequestsPytestAllure报告定制 2、基于工具类的接口自动化&#xff0c;如&#xff1a; PostmanNewmanJenkinsGit/svnJme…

c++0305习题

一、求下面表达式的值 1&#xff0e;0 2&#xff0e;-1 3&#xff0e;1 4&#xff0e;&#xff08;1&#xff09;1 &#xff08;2&#xff09;3.2 &#xff08;3&#xff09;0 &#xff08;4&#xff09;7.0 5.&#xff08;1&#xff09;0&#xff08;2&#xff09;300.005&a…

python中lambda简介及用法

什么是lambda&#xff1f; lambda是python中的一个关键字&#xff0c;它用于创建匿名函数&#xff0c;也就是没有名字的函数。lambda函数通常用于一些简单的操作&#xff0c;比如作为参数传递给其他函数&#xff0c;或者作为返回值返回给调用者。lambda函数的语法如下&#xf…

记录tensorflow cpu版本安装

已有&#xff1a;anaconda环境 创建虚拟环境 conda create -n tf_cpu python3.9.0 进入虚拟环境 activate tf_cpu 可以选择设置下载源 # 查看当前下载源 conda config --show-sources # 添加下载源 # 清华镜像源 conda config --add channels https://mirrors.tuna.tsing…

数据结构面试问题

数据结构是计算机科学中一个非常重要的基础知识,在面试中也经常会被问到。本文将详细介绍几种常见数据结构的面试题,并给出代码示例,希望对大家准备面试有所帮助。 一、数组和字符串 1. 如何反转一个字符串? 最简单的方法是使用双指针,一个指向字符串开头,一个指向结尾,然后…

Ubuntu 18.04安装最新版Visual Studio Code(VS Code)报依赖库版本过低错误

Ubuntu 18.04安装最新版Visual Studio Code&#xff08;VS Code&#xff09;报依赖库版本过低错误 1. 问题描述2. 解决方案2.1 修复之前安装的错误2.2 安装VS Code 1.85.2 3. 原因分析 1. 问题描述 在Ubuntu 18.04系统上安装VS Code ≥ v1.86.2&#xff08;测试到v1.87.1&…

laravel 模型多对多,应用

laravel 模型多对多&#xff0c;应用&#xff0c;试卷 跟 区域 多对多关系 一个试卷可以发放到a b c 区域 创建试卷表 CREATE TABLE exams (exam_id int(11) unsigned NOT NULL AUTO_INCREMENT,exam_title varchar(100) NOT NULL DEFAULT COMMENT 标题,created_time int(11…

考虑局部遮阴的光伏PSO-MPPT控制MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 简介 光伏电池阵列的输出特性曲线不是线性变化的。当光伏电池遮荫时&#xff0c;产生的功 率会不断变化&#xff0c;致使光伏电池阵列的输出功率不断变化&#xff0c;其输出特性曲线呈现多峰值的现象。 多峰…

【漏洞复现】Linksys E2000 position.js 身份验证绕过漏洞(CVE-2024-27497)

0x01 产品简介 Linksys E2000是一款由思科&#xff08;Cisco&#xff09;品牌推出的无线路由器&#xff0c;它是一款支持2.4GHz和5GHz双频段的无线路由器&#xff0c;用户可以避开拥挤的2.4GHz频段&#xff0c;独自享受5GHz频段的高速无线生活。 0x02 漏洞概述 Linksys E200…

Jmeter 使用教程(小白一学就会)

下载 官网下载地址 解压 zip 打开 进入 jmeter 的 bin 目录下mac 电脑启动&#xff0c;执行以下命令&#xff08;注意 windows 使用 jmeter.bat 启动&#xff09; ./jmeter打开成功 修改为中文 创建测试计划 添加线程组 修改线程属性 在线程组添加 HTTP 请求 设置 Web…

golang数组和Slice地址

var nameList [56]string // 数组指针地址与数据第一个值地址相同 fmt.Printf("nameLists数组的内存地址为%p\n", &nameList) fmt.Printf("nameList数组中第一个元素的地址为%p\n", &nameList[0]) fmt.Printf("nameList数组中第二个元素的地址…

深入理解MySQL中的MVCC(多版本并发控制)

在MySQL中&#xff0c;MVCC是一种用于提供并发控制的技术&#xff0c;它允许数据库系统在事务并发执行的情况下保持数据的一致性&#xff0c;同时提高了数据库的并发性能。MVCC背后的理念是允许每个事务可以看到一个一致性的快照&#xff0c;从而避免了读取操作被写入操作所阻塞…

Spring之BeanFactory与FactoryBean的区别

BeanFactory BeanFactory是Spring中工厂的顶层接口&#xff0c;也是IOC容器的核心接口&#xff0c;BeanFactory中定义了管理Bean的通用方法&#xff0c;职责包括实例化、定位、配置应用程序中的对象以及建立这些对象的依赖。BeanFactory只是一个接口&#xff0c;并不是IOC容器…

DDR3 NATIVE接口

参考&#xff1a; DDR3 控制器 MIG IP 详解完整版 &#xff08;native&Vivado&Verilog&#xff09;_mig ip核-CSDN博客 APP和AXI接口有许多相似的地方&#xff08;握手部分&#xff09;&#xff0c; 但是由于和物理芯片直接相关&#xff0c;有更多不一样的地方。 a…

Python算法题集_搜索二维矩阵

Python算法题集_搜索二维矩阵 题74&#xff1a;搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…

c++中string的使用!!!(适合初学者 浅显易懂)

我们先初步的认识一下string,string底层其实是一个模版类 typedef basic_string<char> string; 我们先大致的把string的成员函数列举出来 class string { private: char * str; size_t size; size_t capacity; }; 1.string的六大默认函数 1.1 构造函数、拷贝构造 注&am…

基础刷题50之四(有效的字母异位词)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、题目二、力扣官方题解1、排序2、哈希表 三、文心一言解释1、排序2、哈希表 总结 前言 刚上研一&#xff0c;有人劝我好好学C&#xff0c;当时用的不多就没…

动态规划(算法竞赛、蓝桥杯)--数位DP--Windy树

1、B站视频链接&#xff1a;E37 数位DP Windy数_哔哩哔哩_bilibili 题目链接&#xff1a;[SCOI2009] windy 数 - 洛谷 #include <bits/stdc.h> using namespace std; const int N 12; int a[N]; //把整数的每一位数字抠出来&#xff0c;存入数组 int f[N][10]; /…

代码随想录算法训练营第36天—动态规划04 | ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

01背包 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1cg411g7Y6 常见的背包问题类型&#xff08;大厂面试重点掌握01背包和完全背包即可&#xf…