2024-05-29:用go语言,给定一个只包含正整数的数组 nums,任务是通过多次操作最小化数组的长度。 每次操作可以从数组

举报
福大大架构师每日一题 发表于 2024/05/29 14:44:56 2024/05/29
【摘要】 2024-05-29:用go语言,给定一个只包含正整数的数组 nums,任务是通过多次操作最小化数组的长度。每次操作可以从数组中选择两个不同的下标 i 和 j,使得 nums[i] 和 nums[j] 均为正整数。然后,将 nums[i] 除以 nums[j] 的余数插入数组末尾,同时删除原始的两个元素。最终要求计算进行操作后的最短数组长度。输入:nums = [1,4,3,1]。输出:1。...

2024-05-29:用go语言,给定一个只包含正整数的数组 nums,任务是通过多次操作最小化数组的长度。

每次操作可以从数组中选择两个不同的下标 i 和 j,使得 nums[i] 和 nums[j] 均为正整数。

然后,将 nums[i] 除以 nums[j] 的余数插入数组末尾,同时删除原始的两个元素。

最终要求计算进行操作后的最短数组长度。

输入:nums = [1,4,3,1]。

输出:1。

答案2024-05-29:

chatgpt

题目来自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))

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。