2021(届)秋招美团后台开发二面

面试已经过去两天了,一点信息也没有,估计凉凉。分享学习下,且行且努力。
面试题目给了五个问题,两道编程题,两道基础知识点。
第一题:在一个数组里找到第m小的value,打印出来。
解法1:先排序,在通过元素下标访问。
#include <iostream>
using namespace std;
void Qsort(int arr[],int low,int high)
{
if(low >= high)
return;
int left = low+1;
int right = high;
int temp;
int p = arr[low];
while(left <= right)
{
while(left <= right&& arr[right] > p)
right--;
while(left <= right&& arr[left] < p)
left++;
if(left >= right)
break;</iostream>

    temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
}
arr[low] = arr[right];
arr[right] = p;
Qsort(arr, low,right -1);
Qsort(arr, left,high);

}
int main() {
int n = 6;
int m =3;
int arr[] = {23,4,56,7,89,9};
Qsort(arr,0,n-1);
for(int i = 0;i < n;i++)
cout<<arr[i]<<" "<<endl;
cout<<endl;
if(m < n)
cout<<arr[m-1]<<endl;
else{
cout<<"查询元素超出下表"<<endl;
}
//cout<<"Hello world!"<<endl;

}
解法二:调掉STL中排序算法
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[] = {2,5,6,3,45,89};
int n = 5;
int m = 2;
for(int i= 0;i < )
sort(arr,arr+n);
cout<<arr[m-1]<<endl;</algorithm></iostream>

}
解法3:使用选择排序,循环遍历m次;
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[] = {2,5,6,3,45,89};
int n = 6;
int m = 2;
int temp;
int t = 0;
for(int i = 0;i < m;i++)
{
t = i;
for(int j = i+1;j < n;j++)
{
if(arr[j] < arr[t])
{
t = j;
}
}
temp = arr[t];
arr[t] = arr[i];
arr[i] = temp;
}
cout<<arr[m-1]<<endl;</algorithm></iostream>

}
第二题:从n个不重复的数字里边随机的选出m个数,打印出来。其中n>=m
方法1:采用DFS算法进行遍历
#include <iostream>
using namespace std;
#define NN 10000
bool flag = true;
void dfs(int arr[], int n, int m, int i, int counter, int res[])
{</iostream>

if(flag&&counter == m)
{
    flag = false;
    for(int j  = 0;j < m;j++)
        cout<<res[j]<<" ";
    cout<<endl;
}
else{
     if(i < n&&flag){
        i++;
        dfs(arr,n,m,i,counter,res);//这个数不选 
        res[counter++] = arr[i-1];
        dfs(arr,n,m,i,counter,res);//选择该数 

    }
}

}

using namespace std;
int main() {
//int a;
//cin >> a;
int n = 6;
int m =3;
int arr[] = {23,4,56,7,89,9};
int i = 0;
int counter = 0;
int res[20]= {0};
dfs(arr,n,m,i,counter,res);
}
第二种解法:在0~n-1之间求m个随机正整数
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <vector>
using namespace std;
vector<int> randArray(int low,int high,int m)
{ //创建一个区间范围在[llow,high)的随机不重复整数数组 ,m 不大于区间长度
vector<int> vec;
vector<int> res;
for(int i = low;i < high;i++ )
{
vec.push_back(i);
}
srand(time(NULL));//=time(0) ,随机数只需要设置一次
int t;
for(int i = 0;i < m;i++)
{
t = rand()%vec.size();//在现有的向量中随机选择一个下标
res.push_back(vec[t]);//选择到的值放在容器中
swap(vec[t],vec[vec.size()-1]);//将该值和最后一个值进行交换
vec.pop_back();//将选择过的值删除
}
return res;
}</int></int></int></vector></iostream>

int main() {
//int a;
//cin >> a;
int n = 6;
int m =3;
vector<int> res;
int arr[] = {23,4,56,7,89,9};
res = randArray(0,n,m);</int>

for(int i  = 0;i <m;i++)//
{
    cout<<arr[res[i]]<<" ";        
 } 
 cout<<endl;
 return 0;

}

第三题:
进程A和B

A:
*(0X123AA) = 10;

B:
*(0X123AA) = 20;

A和B进程在同时运行时,会不会出现写冲突?
第四题:
person(
id int,
age int,
height int,
score int
) 3000万+数据

select * from person where age > 18 and score =90;

索引:(age),因为age使用了范围查询,所以后面即使有索引也会失效,所以只需要在age上创建索引。
第五题:
Java相关的面试题目

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务