2024-05-29:用go语言,给定一个只包含正整数的数组 nums,任务是通过多次操作最小化数组的长度。 每次操作可以从数组中选择两个不同的下标 i 和 j,使得 nums[i] 和 nums[j
2024-05-29:用go语言,给定一个只包含正整数的数组 nums,任务是通过多次操作最小化数组的长度。
每次操作可以从数组中选择两个不同的下标 i 和 j,使得 nums[i] 和 nums[j] 均为正整数。
然后,将 nums[i] 除以 nums[j] 的余数插入数组末尾,同时删除原始的两个元素。
最终要求计算进行操作后的最短数组长度。
输入:nums = [1,4,3,1]。
输出:1。
答案2024-05-29:
题目来自leetcode3012。
大体步骤如下:
1.定义一个函数 minimumArrayLength(nums []int) int
,该函数接收一个整数数组 nums
作为输入并返回一个整数作为输出。
2.使用 slices.Min(nums)
函数找到数组 nums
中的最小值,将其赋值给变量 m
。
3.对数组 nums
中的每个元素执行以下操作:
- 如果当前元素除以
m
的余数大于 0,则直接返回 1。这意味着无法通过操作将该元素减小到0。
4.初始化一个计数器 cnt
为0,然后对数组 nums
中的每个元素执行以下操作:
- 如果当前元素等于
m
,则增加计数器cnt
的值。
5.最终返回操作完成后的数组最小长度:(cnt + 1) / 2
。这表示将 m
减小到0所需的最小步骤数。
总的时间复杂度:
-
找到最小值
m
的时间复杂度为 O(n),其中 n 是输入数组的长度。 -
遍历输入数组
nums
两次以查找余数不为0的元素和统计m
的数量的时间复杂度为 O(n)。
综合来看,总的时间复杂度为 O(n)。
总的额外空间复杂度:
- 除了输入数组外,算法使用了几个整数变量来进行计算,这些变量的额外空间消耗是常量级的。
所以,总的额外空间复杂度为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
"slices"
)
func minimumArrayLength(nums []int) int {
m := slices.Min(nums)
for _, x := range nums {
if x%m > 0 {
return 1
}
}
cnt := 0
for _, x := range nums {
if x == m {
cnt++
}
}
return (cnt + 1) / 2
}
func main() {
nums := []int{1,4,3,1}
fmt.Println(minimumArrayLength(nums))
}
Python完整代码如下:
# -*-coding:utf-8-*-
import math
def minimum_array_length(nums):
m = min(nums)
for x in nums:
if x % m > 0:
return 1
cnt = 0
for x in nums:
if x == m:
cnt += 1
return (cnt + 1) // 2
nums = [1, 4, 3, 1]
print(minimum_array_length(nums))
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2023-05-29 文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题
2023-05-29 2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是 [1,2,3,4] 那么你可以对最后一
2022-05-29 2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。 已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表。 如果两名成员各自拥有
2021-05-29 2021-05-29:最常使用的K个单词II。在实时数据流中找到最常使用的k个单词,实现TopK类中的三个方法: Top