Techioz Blog

配列内の整数は、1 つの整数を除いて完全に奇数であるか、完全に偶数です。

概要

整数を含む配列 (長さは少なくとも 3 ですが、非常に大きくなる可能性があります) が与えられます。配列は、全体が奇数の整数で構成されているか、単一の整数 N を除いて全体が偶数の整数で構成されています。配列を引数として受け取り、この外れ値 N を返すメソッドを作成します。

これはこれまでの私のコードですが、機能していないようです。

arr = [160, 3, 1719, 19, 11, 13, -21]
n = arr.length

def getOddOccurrence(arr, arr_size)
  for i in range(0, arr_size)
    count = 0
    for j in range(0, arr_size)
      if arr[i] == arr[j]
        count += 1
      end
      if(count % 2 != 0)
        return arr[i]
      end
    end
  end
  return -1
end

print getOddOccurrence(arr, n)

このコードにはどのような変更が必要ですか?

解決策

これを行う簡単な方法は次のとおりです

arr = [160, 3, 1719, 19, 11, 13, -21]
arr.group_by(&:odd?).values.sort_by(&:count)[0][0]
# => 160

group_by(&:odd?) は奇数と偶数の 2 つのハッシュを作成します

値 ハッシュの値を取得します。偶数と奇数の 2 つの配列

sort_by(&:count) 配列を並べ替えます。値が少ないものが最初になります。

[0][0] 最初の配列の最初の番号を取得します