程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Single Number II,singlenumberii

Single Number II,singlenumberii

編輯:關於C語言

Single Number II,singlenumberii


Given an array of integers, every element appears three times except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

解題思路:

1.利用二進制中的位運算,有n*3個相同的數相加,那麼其二進制的每一位必定是3的倍數

2.剩下的那個單獨的數,就是每一位除以3的余數,之後在把每一位轉換成十進制相加,總和就是單獨的那個數。

 1 int singleNumber(int* nums, int numsSize) {
 2     int ary[32] = {0};
 3     int res = 0;
 4     int i;
 5     int j;
 6     for(i = 0; i < 32; i++)
 7     {
 8         for(j = 0; j < numsSize; j++)
 9         {
10             ary[i] += ((nums[j] >> i) & 1);
11             ary[i] = ary[i] % 3;
12         }
13         res |= (ary[i] << i);
14     }
15     return res;
16 }

轉:http://blog.csdn.net/feliciafay/article/details/19004479

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved