首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby - Hacker Rank问题

Ruby - Hacker Rank问题
EN

Stack Overflow用户
提问于 2021-09-21 17:50:48
回答 2查看 266关注 0票数 0

**

好的,伙计们,我在黑客等级的任务上有个问题。我不能通过所有的测试。

**

任务:

给定五个正整数,通过精确地求和五个正整数中的四个,找到可以计算的最小值和最大值。然后将各自的最小值和最大值打印为两个空格分隔的长整数的一行。

功能描述

在下面的编辑器中完成miniMaxSum函数。

miniMaxSum具有以下参数:

arr:由5个整数组成的数组

打印

在一行上打印两个空格分隔的整数:最小和最大和4的5个元素。

输入格式

由五个空格分隔的整数组成的一行。

**这就是我的任务和代码:**

代码语言:javascript
复制
require 'json'
require 'stringio'

#
# Complete the 'miniMaxSum' function below.
#
# The function accepts INTEGER_ARRAY arr as parameter.
#

def miniMaxSum(arr)
   if arr[0] != arr[1]
     $prev = 0 
     $prev2 = Float::INFINITY
     i = 0
     5.times do
       $res = arr.reject { |n| n == arr[i] }.sum
       $prev = $res if $res > $prev
       i = i + 1
      end
      i = 0
     5.times do
       $res2 = arr.reject { |n| n == arr[i] }.sum
       $prev2 = $res2 if $res < $prev2
       i = i + 1
      end
     print "#{$prev2} #{$prev}"
    else
        print "#{arr.sum} #{arr.sum}"
    end
      
end

arr = gets.rstrip.split.map(&:to_i)

miniMaxSum arr

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-21 22:48:34

我们可以观察到,这5个元素中的4个元素之和就是所有5个元素减去其中一个元素的和。如果我们有[1,2,3,4,5],和是15,我们可以通过减去其中的每一个得到部分和。15 -1是14,15 -2是13,等等。

然后我们可以在一个循环中找到最小和最大。

这在算法上比排序和求和最大和最小的数字更有效。该算法只需迭代两次列表。它运行在2n时间,或O(n)。排序需要O(nlogn)加上两个迭代来求和。对于5个数字来说,这并不重要,但随着尺寸的增大,这一点非常重要。

时间复杂度

代码语言:javascript
复制
def min_max_sum(nums)
  # Take the sum of every number.
  sum = nums.sum

  # Ye olde min/max trick.
  # Set min to something everything will be smaller than.
  # Set max to something everything will be larger than.
  min = Float::INFINITY
  max = -Float::INFINITY
  
  # For each number...
  nums.each do |num|
    # Get the sum for 4 of 5 values by subtracting this number from the sum.
    partial_sum = sum - num
    
    # Check if it's the min and/or the max.
    min = partial_sum if partial_sum < min
    max = partial_sum if partial_sum > max
  end
  
  return [min, max]
end
票数 0
EN

Stack Overflow用户

发布于 2021-09-21 17:57:43

把数组中的4个最小元素和4个最大元素相加不就足够了吗?

你的问题在输入上有点不清楚,因此我提供了两个答案。

当输入是由5个整数组成的数组时

代码语言:javascript
复制
def min_max_sum(array)
  sorted = array.sort
  puts "#{sorted.first(4).sum}  #{sorted.last(4).sum}"
end

min_max_sum [5, 4, 3, 2, 1]
#=> 10  14

当输入格式是由五个空格分隔的整数组成的一行时

代码语言:javascript
复制
def min_max_sum(string)
  sorted = string.split(/ /).map(&:to_i).sort
  puts "#{sorted.first(4).sum}  #{sorted.last(4).sum}"
end

min_max_sum "5 4 3 2 1"
#=> 10  14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69273425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档