著作権:コードワードは容易ではない、ソースを明記してください。https://blog.csdn.net/qq_24309981/article/details/90241534
説明1
説明は、
すべての要素が一度だけ表示される一つの要素を除いて、正確に2回出現し、整数のみからなるソートされた配列を考えます。一度だけ表示され、この単一の要素を検索します。
例1
- 入力:[1,1,2,3,3,4,4,8,8]
- 出力:2
例2
- 入力:[3,3,7,7,10,11,11]
- 出力:10
注意
- あなたのソリューションは、時間とO(1)スペース(n個のログ)Oで実行する必要があります。
2コード
#include <iostream>
#include <vector>
using namespace std;
//方法一
//int singleNonDuplicate(vector<int>& nums) {
// int res = 0;
// for (const auto& num : nums) res ^= num;
// return res;
//}
//方法二
int singleNonDuplicate(vector<int>& nums) {
int res = 0;
if (nums.size() % 2)
{
res = nums[nums.size() - 1];
for (int i = 0; i < nums.size() - 1; i += 2)
{
if (nums[i] ^ nums[i + 1])
{
res = nums[i];
break;
}
}
}
return res;
}
int main()
{
vector<int> nums = { 1,1,2 };
int res = singleNonDuplicate(nums);
cout << res << endl;
system("pause");
return 0;
}
3について説明しました
この方法は:論理ゲートXORゲート、非単調増加アレイも当てはまる場合でも、
方法2:単調増加のアレイにのみ適用可能。