題目描述:ios
編寫一個函數,肯定須要改變幾個位,才能將整數A轉變成整數B。算法
給定兩個整數int A,int B。請返回須要改變的數位個數。數組
解題思路:函數
用異或,相同爲0,不一樣爲1;spa
程序代碼:設計
class Transform {
public:
int calcCost(int A, int B) {
// write code here
int amount = A^B;
int count = 0;
while(amount){
count ++;
amount = amount & (amount - 1);
}
return count++;
}
};
題目描述:code
請編寫程序交換一個數的二進制的奇數位和偶數位。(使用越少的指令越好)orm
給定一個int x,請返回交換後的數int。遞歸
解題思路:get
用0xAAAAAAAA與x相與求的奇數位上數字(偶數位上數字爲0)
用0x 55555555 與x相與求的偶數位上數字(奇數位上數字爲0)
oddVal右移一位 even左移一位 。
程序代碼:
class Exchange {
public:
int exchangeOddEven(int x) {
// write code here
int odd = x & (0x55555555);
int even = x & (0xaaaaaaaa);
return (odd << 1) | ((even >> 1)&0x7fffffff);// 無符號右移,高位補0
}
};
題目描述:
在n個頂點的多邊形上有n只螞蟻,這些螞蟻同時開始沿着多邊形的邊爬行,請求出這些螞蟻相撞的機率。(這裏的相撞是指存在任意兩隻螞蟻會相撞)
給定一個int n(3<=n<=10000),表明n邊形和n只螞蟻,請返回一個double,爲相撞的機率。
解題思路:
考慮不相撞的機率,只有當全部的螞蟻都朝一個方向(順時針或者逆時針)爬行時纔不會相撞,因此不相撞的機率爲:2/2^n.
程序代碼:
class Ants {
public:
double antsCollision(int n) {
// write code here
double rat;
rat = 1.0 - pow(0.5,n - 1);
return rat;
}
};
題目描述:
請編寫一個函數,將兩個數字相加。不得使用+或其餘算數運算符。
給定兩個int A和B。請返回A+B的值
解題思路:
用位的異或實現加法;
程序代碼:
class UnusualAdd {
public:
int addAB(int A, int B) {
// write code here
int Xor, And;
while(B != 0){
Xor = A^B;
And = (A&B)<<1;
A = Xor;
B = And;
}
return A;
}
};
題目描述:
有一棵無窮大的滿二叉樹,其結點按根結點一層一層地從左往右依次編號,根結點編號爲1。如今有兩個結點a,b。請設計一個算法,求出a和b點的最近公共祖先的編號。
給定兩個int a,b。爲給定結點的編號。請返回a和b的最近公共祖先的編號。注意這裏結點自己也可認爲是其祖先。
解題思路:
滿二叉樹的父節點是子節點除以2取整的結果,利用這一點找出父節點。若是a != b,就讓其中的較大數除以2, 如此循環知道a == b,便可獲得原來兩個數的最近公共祖先。
程序代碼:
class LCA {
public:
int getLCA(int a, int b) {
// write code here
while(a != b){
if(a > b)
a /= 2;
else
b /= 2;
}
return a;
}
};
題目描述:
給定一個二叉樹,找到最大深度,即找出從根節點到葉節點的最大路徑長度。
解題思路:
遞歸找出二叉樹的最大深度;
程序代碼:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode *root) {
if(root == NULL )
return 0;
return 1 + max(maxDepth(root ->left), maxDepth(root -> right));
}
};
題目描述:
請設計一個高效的方法,找出任意指定單詞在一篇文章中的出現頻數。
給定一個string數組article和數組大小n及一個待統計單詞word,請返回該單詞在文章中的出現頻數。保證文章的詞數小於等於1000。
解題思路:
利用 .count()函數統計在數組中某個值出現的次數;
程序代碼:
class Frequency:
def getFrequency(self, article, n, word):
題目描述:
設a、b、c均是0到9之間的數字,abc、bcc是兩個三位數,且有:abc+bcc=532。求知足條件的全部a、b、c的值。
解題思路:
利用數字的含義,例如:524 = 5100 + 210 +4*1;
程序代碼: