給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1] 輸出: 1
示例 2:
輸入: [4,1,2,1,2] 輸出: 4
位運算。
乙個數異或乙個與他相同的數結果為0.
0異或乙個數結果為這個數本身。
所以從頭到尾將所有數異或一次,得到的結果就是那個只出現一次的數,其他數都抵消了。
class solution
return temp;
}};
給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例 1:
輸入: [3,2,3] 輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2] 輸出: 2
方法一:
用內建容器map記錄出現的次數。
class solution
}return 0;
}};
方法二:
排序
class solution
};
方法三:
摩爾投票法
class solution
else
else}}
return temp;
}};
搜尋二維矩陣 ii
編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性:
示例:現有矩陣 matrix 如下:
[ [1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30] ]
給定 target = 5,返回 true。
給定 target = 20,返回 false。
class solution
int col = matrix[0].size();
int i = 0, j = col - 1;
while(i >= 0 && i < row && j >= 0 && j < col)
else if(matrix[i][j] < target)
else
}return false;
}};
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。
說明:示例:
輸入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 輸出: [1,2,2,3,5,6]
原地演算法,先把nums1中的元素移動到nums1陣列的最後面。
class solution
i++, j++;
int k = 0;
while(i < size && j < n)
else
}while(i < size)
while(j < n)
}};
幾個有意思的面試題
1,abcdx9 dcba 因為9乘a不進製所以a只能是1 9乘d得個位是1所以d只能是9 同樣9乘b也不能進製只有1和0,1已屬a所以b只能是0 9乘9進8要想第二位為0,乘9的個位上必須是2,c就只有8了 所以abcd 1089 2,一艘輪船從甲港順水航行到乙港,立即逆水返回甲港。共用8小時。已...
指標幾個有意思的面試題
題一 int main int ptr int arr 1 printf d d a 1 ptr 1 執行結果 2 5 return 0 考察知識點 1.陣列名為首元素的位址,給其進行 1操作其實就是指標向後走一步,也就是第二個元素的位址 2.取位址陣列名 arr 取到的是整個陣列的位址,雖然其指向...
有意思的面試題
1.10個箱子,每個箱子10個蘋果,其中乙個箱子的蘋果是9兩 個,其他的都是1斤 個。要求利用乙個秤,只秤一次,找出那個裝9兩 個的箱子。1,他們都是很聰明的人 2,他們的原則是先求保命,再去多殺人 3,100顆不必都分完 4,若有重複的情況,則也算最大或最小,一併處死 3.現在北京有一套房子,20...