本次春招測試題總共5道題,只有編程,每題20分,總共100分。
題目在劍指和leetcode都有原型題目,之後在分析的時候,也會給出參考。
1. 數字置換
解析:“第i個整數表示將數字i替換爲數字ai”,這直接可以採用哈希表來存儲,相關數據結構的用法和技巧,在《數據結構與算法》的課中數組一章也有詳細講。
關鍵在於如何提高算法時間效率和降低空間效率。
#include <iostream>
using namespace std;
int* fun(long long a,int *b)
{
int length = 0;
//cout<<a;
if(a == 0) return NULL;
if(a<0)
{
cout<<"-";
a = 0-a;
}
long long temp = a;
while(temp)
{
temp /= 10;
length++;
}
//cout<<length<<endl;;
int* arr = new int[length];
int l = length;
for(int i = l; i>=0; i--)
{
arr[i] = a%10;
//cout<<arr[i];
a /= 10;
}
for(int j = 1; j<=length; j++)
{
arr[j] = b[arr[j]-1];
cout<<arr[j];
}
cout<<endl;
return arr;
delete[] arr;
}
void test1()
{
long long a = 1234567;
int b[10] = {9,8,7,6,5,4,3,2,1};
fun(a,b);
}
void test2()
{
long long a = -12;
int b[10] = {2,3,7,6,5,4,3,2,1};
fun(a,b);
}
void test3()
{
long long a = 73598793378342493;
int b[10] = {1,3,6,1,6,8,9,1,3};
fun(a,b);
}
void test4()
{
long long a = 0;
int b[10] = {1,3,6,1,6,8,9,1,3};
fun(a,b);
}
int main()
{
// long long a = -12;
// //cin>>a;
// int b[10] = {0,0,0};
//
// int i = 0;
// while(cin>>b[i])
// i++;
//
// int *p = fun(a,b);
//cout<<p;
test1();
test2();
test3();
test4();
return 0;
}
2.同心圓
遞歸/循環: 劍指10:斐波那契數列
課程對應講解:https://edu.csdn.net/course/detail/28681 第二章第一節。
#include <iostream>
#include <math.h>
using namespace std;
double AreaOfCircle(int r2,int r1)
{
return M_PI*(r2*r2 - r1*r1);
}
double AreaOfRing(int n, int* r)
{
//(((nums&1)==0)?"偶數":"奇數")
double result = 0.0;
if(n == 1)
return result = M_PI*r[0]*r[0];
if(n == 2)
return result = AreaOfCircle(r[1],r[0]);
if((n&1)==0) //the number of r is even
{
int i = 1;
double temp = 0;
while(2*i <= n)
{
temp = AreaOfCircle(r[2*i-1],r[2*i-2]);
result += temp;
i++;
}
}
else //the number of r is odd
{
int i = 0;
double temp = M_PI*r[0]*r[0];
result = 0;
while(2*i+1 <= n)
{
temp = AreaOfCircle(r[2*i+1],r[2*i]);
result += temp;
i++;
}
}
return result>0?result:-result;
}
void test1()
{
int n = 1;
int r[] = {3};
printf("test1: %.5f\n",AreaOfRing(n,r));
}
void test2()
{
int n = 8;
int r[] = {1,2,3,4,5,6,7,8};
printf("test2: %.5f\n",AreaOfRing(n,r));
}
void test3()
{
int n = 5;
int r[] = {1,2,3,4,5};
printf("test3: %.5f\n",AreaOfRing(n,r));
}
int main()
{
test1();
test2();
test3();
return 0;
}
3.套娃前綴和
4.小倉的射擊練習3
5. 子序列計數
推薦閱讀:
[1] 數據結構與算法 | 你知道快速排序,那你知道它的衍生應用嗎?Partition函數
[2] 數據結構與算法 | 數據結構中到底有多少種“樹”?一文告訴你
[3] 數據結構與算法 | 二分查找:劍指offer53 在排序數組中查找數字
[4] 2020字節跳動秋招筆試題解析與代碼分享(持續更新中)
關注微信公衆號:邁微電子研發社,回覆獲取更多精彩內容。
知識星球:社羣旨在分享AI算法崗的秋招/春招準備攻略(含刷題)、面經和內推機會、學習路線、知識題庫等。