Leetcode - Medium

@ 136 Single Number

thought:

利用异或运算符^的特性 - 两个相同的数异或后结果为0;

code1:利用迭代器访问vector<int> - 20ms

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         int result = 0;
 5         vector<int>::iterator itv = nums.begin();
 6         for(; itv != nums.end(); ++itv)
 7         {
 8             result ^= (*itv);
 9         }
10         return result;
11     }
12 };

 

code2: 利用下标访问vector<int> - 16ms

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         int result = 0;
 5         for(int idx=0; idx<nums.size(); ++idx)
 6         {
 7             result ^= nums[idx];
 8         }
 9         return result;
10     }
11 };

 

analysis:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:孙朝阳
链接: https://www.zhihu.com/question/31419866/answer/52261399
来源:知乎

debug build得到的代码在加入了很多检测,如迭代器越位、有效性、是否指向同一容器等等,另外很多层小函数调用,导致严重变慢。
但是,所有这些变慢在release build都会消除,对vector的迭代器来说,并不比下标慢。而且,由于下标到迭代器的代码风格转换,使用迭代器的代码实测甚至往往比下标还快。我曾经在vc11上得到过迭代器更快的测试结果。

 

你可能感兴趣的:(Leetcode - Medium)