面试已经过去两天了,一点信息也没有,估计凉凉。分享学习下,且行且努力。
面试题目给了五个问题,两道编程题,两道基础知识点。
第一题:在一个数组里找到第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相关的面试题目