当前位置: 首页 > news >正文

菊厂0510面试手撕题目解答

题目

输入一个整数数组,返回该数组中最小差出现的次数。

示例1:输入:[1,3,7,5,9,12],输出:4,最小差为2,共出现4次;

示例2:输入:[90,98,90,90,1,1],输出:4,最小差为0,其中[1,1]出现1次,[90,90,90]两两相减,共出现3次;

解题思路

优解

思路与代码

  1. 排序数组:使用内置的排序方法对数组进行排序。

  2. 计算相邻差值:遍历排序后的数组,计算相邻元素的差值,并存储在列表diffs中。

  3. 确定最小差值:使用min函数找到diffs中的最小值。

  4. 处理最小差值为0的情况:遍历排序后的数组,统计连续相同元素的组,并计算每组贡献的对数。连续重复元素的组的对数计算公式为k*(k-1)/2,其中k是该组的元素个数。

  5. 处理最小差值不为0的情况:直接统计相邻差值等于最小差值的次数,使用count方法实现。

这种方法通过排序和线性遍历,确保了时间复杂度为O(n log n),适用于较大的数组。

def min_diff_count(nums):nums.sort()n = len(nums)if n < 2:return 0diffs = [nums[i] - nums[i-1] for i in range(1, n)]min_diff = min(diffs)if min_diff == 0:total = 0current_count = 1for i in range(1, n):if nums[i] == nums[i-1]:current_count += 1else:if current_count >= 2:total += current_count * (current_count - 1) // 2current_count = 1# 处理最后一个可能的连续组if current_count >= 2:total += current_count * (current_count - 1) // 2return totalelse:return diffs.count(min_diff)# nums = [1, 3, 5, 7, 9, 12]
nums = [90, 98, 90, 90, 1, 1]
print(min_diff_count(nums))
暴力解

思路与代码

  1. 初始化:定义最小差值为无穷大(float('inf')),计数器初始化为0。

  2. 遍历所有元素对:使用双重循环遍历所有可能的元素对(i < j),避免重复计算。

  3. 计算绝对差:对于每对元素,计算它们的绝对差。

  4. 更新最小差值和计数

    • 如果当前差值小于已知最小差值,则更新最小差值,并将计数器重置为1。

    • 如果当前差值等于已知最小差值,则计数器加1。

  5. 返回结果:最终返回最小差值出现的次数。

  • 示例1:输入 [1, 3, 7, 5, 9, 12],输出为 4

  • 示例2:输入 [90, 98, 90, 90, 1, 1],输出为 4

  • 极端案例:输入 [1, 1, 1],输出为 3(所有两两对的差均为0)。

此方法的时间复杂度为 O(n^2),适用于小规模数据。对于大规模数据,推荐使用排序后相邻元素差值的优化方法。

def min_diff_count_brute_force(nums):n = len(nums)if n < 2:return 0min_diff = float('inf')count = 0for i in range(n):for j in range(i + 1, n):diff = abs(nums[i] - nums[j])if diff < min_diff:# 发现更小的差值,重置计数min_diff = diffcount = 1elif diff == min_diff:# 差值等于当前最小值,增加计数count += 1return count# nums = [1, 3, 5, 7, 9, 12]
nums = [90, 98, 90, 90, 1, 1]
print(min_diff_count_brute_force(nums))
http://www.xdnf.cn/news/399241.html

相关文章:

  • spdlog日志格式化 标志全指南
  • Java详解LeetCode 热题 100(14):LeetCode 56. 合并区间(Merge Intervals)详解
  • 【网络安全】SQL注入
  • pdf 不是扫描件,但却无法搜索关键词【问题尝试解决未果记录】
  • 用短说社区搭建的沉浸式生活方式分享平台
  • Redis+Caffeine构建高性能二级缓存
  • Python邮件处理(使用imaplib和email库实现自动化邮件处理)
  • Kubernetes控制平面组件:Kubelet详解(一):API接口层介绍
  • 自主添加删除开机启动项
  • tinyint(3)数据类型讲解
  • stm32之BKP备份寄存器和RTC时钟
  • 基于Python的高效批量处理Splunk Session ID并写入MySQL的解决方案
  • Hadoop 的代理用户(Proxy User)​ 功能解释
  • 配置hosts
  • 推理加速新范式:火山引擎高性能分布式 KVCache (EIC)核心技术解读
  • 深入理解Embedding Models(嵌入模型):从原理到实战(下)
  • 【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025
  • SpringBoot校园失物招领信息平台
  • Shell脚本编程3(函数+正则表达式)
  • [特殊字符] 本地大模型编程实战(29):用大语言模型LLM查询图数据库NEO4J(2)
  • Modbus协议介绍
  • springboot旅游小程序-计算机毕业设计源码76696
  • Unity ML-Agents实战指南:构建多技能游戏AI训练系统
  • 在Ubuntu系统下编译OpenCV 4.8源码
  • react-diff-viewer 如何实现语法高亮
  • 一小时学会Docker使用!
  • 树莓派4基于Debian GNU/Linux 12 (Bookworm)开启VNC,使用MobaXterm连接VNC出现黑屏/灰屏问题
  • 笔记本电脑升级实战手册【扩展篇1】:flash id查询硬盘颗粒
  • 十四、继承与组合(Inheritance Composition)
  • 【Linux网络编程】HTTPS协议原理