前言
记录几个面试常见题型
一、知识点
C语言中sort api 的使用 ,compare
一道排序题目,数据范围是关键,如果这道题目只能让我们使用O(nlogn)O(nlogn)的算法,显然我们可以选择快速排序,归并排序等算法,这里我们就使用快速排序.
时间复杂度图
二、题目
1、排序数组
1.1 分析
可以直接用 stl sort
这里封装了一个快排函数,顺便复习下排序算法
1.2代码
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
srand((unsigned)time(NULL));
quick_sort(nums,0 , (int) nums.size() - 1);
return nums;
}
void quick_sort(vector<int>& q, int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}
};
2、多数元素
2.1题目分析
简单题,读懂题目就行
2.2代码
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
3存在重复元素
3.1题目分析
专栏给的遍历法,自己使用了 map 方便
3.2代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int,int> m;
for(int i = 0 ; i < nums.size(); i ++)
if(m.count(nums[i]))
return true;
else m[nums[i]] ++;
return false;
}
};
4最大间距
4.1题目分析
恢复有序,在遍历找答案
4.2代码
class Solution {
public:
int maximumGap(vector<int>& nums) {
int n = nums.size() , max = 0 , tem = 0;
if(n < 2) return 0;
sort(nums.begin() , nums.end());
for(int i = 1 ; i < n ; i ++)
{
tem = nums[i] - nums[i - 1];
if(tem> max)
max = tem;
}
return max;
}
};
5按奇偶排序数组
5.1题目分析
用双端列表 ,前后添加
5.2代码
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& nums) {
deque<int> ans;
int n = nums.size();
for(int i = 0 ; i < n ; i ++)
{
if(nums[i]%2)
ans.push_back(nums[i]);
else
ans.push_front(nums[i]);
}
return vector<int>(d.begin(),d.end());
}
};
三、做题记录