더 좋은 방법이 있의 위치를 찾을 최소 배열 요소?
문제
바로 지금 나
def min(array,starting,ending)
minimum = starting
for i in starting+1 ..ending
if array[i]<array[minimum]
minimum = i
end
end
return minimum
end
더 나은"구현"루비에서?이는 하나 여전히 보이는 c-틱.감사합니다.
해결책
을 찾으려면 지수의 최소한의 요소를 사용할 수 있습니다 Enumerable#enum_for
하기
을 얻을 배열의 항목-index 쌍견을 최소한으로 사람들의 Enumerable#min
(는 것입니다 또한 최소의 원본열).
% irb
irb> require 'enumerator'
#=> true
irb> array = %w{ the quick brown fox jumped over the lazy dog }
#=> ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
irb> array.enum_for(:each_with_index).min
#=> ["brown", 2]
하려는 경우 바이어는 특정 배수:
irb> start = 3
#=> 3
irb> stop = 7
#=> 7
irb> array[start..stop].enum_for(:each_with_index).min
#=> ["fox", 0]
irb> array[start..stop].enum_for(:each_with_index).min.last + start
#=> 3
다른 팁
기본적으로는 할 수 있습니다,하지만 당신은 그것을 쓸 수 있는 조금 더 많은 간결하게:
def minval(arr)
arr.inject {|acc,x| (acc && acc < x ? acc : x)}
end
거기에 간단한 방법이며 그것이 나를 위해서는 루비 1.9.2:
a = [6, 9, 5, 3, 0, 6]
a.find_index a.min
이것은 표준에 대한 알고리즘을 찾는 최소한의 배열 요소,그것이 더 좋을 수 있을 배열 정렬되기 전에 이 함수가 호출됩니다.
그렇지 않으면 나를 찾을 수 없는 더 효율적인 방법이 있습니다.특히,선형 시간에서 큰 O 표기법은 우리가 할 수 있습니다.
는 경우 이것은 단순히 학문적 질문,왜 그냥 사용 루비 native sort
방법?그것은 사용하여 구현 퀵 알고리즘으로 간주됩니다.
a = [3, 4, 5, 1, 7, 5]
a.sort![0] # => 1
제휴하지 않습니다 StackOverflow