これはLeetCodeの質問です。私はその質問の異なるバージョンで4つの答えを書いた。私が "ビット操作"を使用しようとしたとき、私はエラーを受け取りました。 LeetCodeの誰も私の質問に答えることができないので、これについてスウィフトの文書を見つけることはできません。私はここで尋ねようと思った。Swiftでビット操作を使用して負の数値を取得できないのはなぜですか?
問題は、特定の配列で多数の要素(> n/2)を取得することです。次のコードはJavaのように他の言語でも動作しますので、Swiftの一般的な質問と思われます。
func majorityElement(nums: [Int]) -> Int {
var bit = Array(count: 32, repeatedValue: 0)
for num in nums {
for i in 0..<32 {
if (num>>(31-i) & 1) == 1 {
bit[i] += 1
}
}
}
var ret = 0
for i in 0..<32 {
bit[i] = bit[i]>nums.count/2 ? 1 : 0
ret += bit[i] * (1<<(31-i))
}
return ret
}
入力[-2147483648]ある場合、出力は2147483648であるが、Javaでは、これは正しい負の数に成功し出力することができます。
があっても32ビットプラットフォーム上で、intは-2147483648と2,147,483,647の間の任意の値を格納することができ、多くの整数の範囲に対して十分な大きさである。
スウィフトDOCは言います。
さて、2,147,483,647で、入力された数よりも1大きいです。私はpow(2.0, 31.0)
を遊び場で走ったとき、と表示されます。私は混乱した。私のコードに何が間違っているのか、私が迷ったのはSwift Int?
を使用することであろう。 '1000 ... 00000 [32 zeroes]'ですが、2,147,483,648は '011 .... 111 [31 ones]' –