231.2的冪
題目描述
給定一個整數,編寫一個函數來判斷它是否是 2 的冪次方。
示例 1:
輸入: 1
輸出: true
解釋: 20 = 1
示例 2:
輸入: 16
輸出: true
解釋: 24 = 16
示例 3:
輸入: 218
輸出: false
解題方法
爲0和1的時候單獨判斷
bool isPowerOfTwo(int n)
{
int remainder = 0;
if (n == 0)
return false;
while (n)
{
if (n == 1)
return true;
remainder = n % 2;
if (remainder != 0)
return false;
n = n >> 1;
}
return true;
}
234.迴文鏈表
題目描述
請判斷一個鏈表是否爲迴文鏈表。
示例 1:
輸入: 1->2
輸出: false
示例 2:
輸入: 1->2->2->1
輸出: true
解題方法
方法一:數組存元素
將鏈表元素放在數組裏面,再判斷是不是迴文。時間複雜度O(n)。空間複雜度O(n)
bool isPalindrome(struct ListNode* head)
{
struct ListNode * p = head;
if (head == NULL || head->next == NULL)
return true;
int arr[50000], t = 0;
memset (arr, 0, sizeof(int) * 1024); // 初始化爲0
while (p != NULL)
{
arr[t++] = p->val;
p =p->next;
}
int i = 0, j = t-1;
while (arr[i] == arr[j] && i <= j)
{
i ++; j --;
}
if (i > j)
return true;
return false;
}
方法二:拷貝鏈表,然後反轉,判斷和原來鏈表是否相同
這種方法時間複雜度O(n),空間複雜度O(n)。除了不需要連續空間之外感覺還沒方法一好。
方法三:翻轉後半部分鏈表,和前面比較是否一致
時間複雜度O(n),空間複雜度O(1)。
代碼可以看看:迴文鏈表的評論,快慢指針找鏈表中點,秀。