1.求1~N的最小公倍数。把每个数字分解质因数,算他们每个质因数的贡献,然后乘起来。我的代码没写好(算质因数不用这么慢的)。#includebits/stdc .使用命名空间标准;typedef long long ll # define maxn 100009 int事实布尔素数;ll mod=987654321int cal(int t,int p){ int CNT=0;while(t % p==0){ CNT;t/=p;}返回cnt}void first() { memset(prime,true,sizeof(prime));prime 1=false for(int I=2;I=100000 I){ int top=sqrt(I);for(int j=2;j=顶部;j){ if(I % j==0){ prime=false;打破;} } } } void solve(int Limit){ first();for(int I=2;我=极限;I){ int top=sqrt(I);for(int j=2;j=顶部;j){ if(prime I % j==0){ fact=max(fact,cal(i,j));} } if(prime) fact=max(事实,1);} } int main(){ ll n;桂皮酸求解(n);ll ans=1;for(ll I=1;I=n;I){ for(ll j=1;j=事实;j){ ans=ans * I % mod;} } coutansendl返回0;}2.去掉字符串构成回文。其实是经典的求回文子序列个数。包括比特/标准数据.使用命名空间标准;typedef long long llll f5959字符串strll dfs(int i,int j){ if(I j){ return 0;} if(I==j){ f=1;返回f;} if(f!=0){ return f;} f=dfs(i,j - 1) dfs(i 1,j) - dfs(i 1,j-1);if(str==str) f=dfs(i 1,j-1)1;返回f;} int main(){ cinstr;int len=str。长度();coutdfs(0,len-1)endl;返回0;}3.象棋的马走K步之后到(X,Y)的方案数。直接递推。包括比特/标准数据.使用命名空间标准;typedef long long llll DP 10103 ll mod=1e 9 7;int dx8={-2,-1,1,2,2,1,-1,-2 };int dy8={-1,-2,-2,-1,1,2,2,1 };int check(int x,int y) { if(x=0 x=8 y=0 y=8)返回真实的返回false}void cal(int x,int y,int state){ DP=0;for(int I=0;I 8;i ) {
int tx = x + dx; int ty = y + dy; if(check(tx, ty)) { dpgit commit -am “commit message"
然后有两种方法来把你的代码和远程仓库中的代码合并:
a. git pull这样就直接把你本地仓库中的代码进行更新但问题是可能会有冲突(conflicts),个人不推荐。
b. 先git fetch origin(把远程仓库中origin最新代码取回),再git merge origin/master(把本地代码和已取得的远程仓库最新代码合并),如果你的改动和远程仓库中最新代码有冲突,会提示,再去一个一个解决冲突,最后再从1开始。
c. 如果没有冲突,git push origin master,把你的改动推送到远程仓库中。
6. 手写快速排序代码.public static int partition2(int arr<>,int l,int r){//基准元素设为第一个int v = arr
(1)符号起始的区块(.bss段):通常指的是存放程序中未初始化或者初始化为0的变量的和静态数据的区域。bss属于静态内存分配,程序结束后静态资源变量由系统自动释放。
(2)数据段:通常指存放程序中已初始化的全局变量的一块内存区域。也属于静态内存分配。
(3)代码段:有时也叫文本段,通常指的是用来存放程序执行代码(包含类成员函数和全局函数及其他函数代码),这部分区域的大小在程序运行前就已经确定,也有可能包含一些只读的常数变量,例如字符串变量。
(4)堆(heap):用于存放进程运行中被动态分配的内存段,大小不固定。当进程调用malloc或者new等函数时,新分配的内存就被动态添加到堆上(堆被扩张),当使用free或者delete等函数释放内存时,被释放的内存从堆中被删除。需要注意的是,它与数据结构中的堆是两回事,它的分配方式类似于链表。
(5)栈(stack):存放程序临时创建的局部变量,不包括static声明的变量,static意味着在数据段中存放。除此之外,当函数被调用时,其参数也会被压到栈中,并在调用结束后,函数的返回值也会被放到栈中。栈由编译器自动释放。其操作方式类似于数据结构中的栈。栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。
8. 在VC 6.0中定义一个数组a<1024><1024>,能够运行吗?不能,因为运行的时刻没有那么大的可分配内存块,栈内存不够,默认是1M的空间。
9. 请描述动态规划的基本思想?分治法
将一个规模为n的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解决这些问题,然后将各个子问题的解合并得到原问题的解
贪心法
当前的选择可能要依赖于已经做出的选择,但不依赖于有待于做出的选择和子问题。因此贪心法是自顶向下,一步一步地做出贪心的选择
动态规划
动态规划的实质是分治思想和解决冗余,因此动态规划是一种将问题实例分析为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略
动态规划所针对的问题有一个显著的特征,即它对应的子问题树中的子问题呈现大量的重复。动态规划的关键在于,对于重复的子问题,只在第一次遇到时求解,并把答案保存起来,让以后再遇到时直接引用,不必要重新求解
10. 分布式服务接口请求的顺序性如何保证?①首先,一般来说,从业务逻辑上最好设计系统不需要这种顺序的保证,因为一旦引入顺序性保障,会导致系统复杂度的上升,效率会降低,对于热点数据会压力过大等问题。
②操作串行化。
首先使用一致性hash负载均衡策略,将同一个id的请求都分发到同一个机器上面去处理,比如订单可以根据订单id。如果处理的机器上面是多线程处理的,可以引入内存队列去处理,将相同id的请求通过hash到同一个队列当中,一个队列只对应一个处理线程。
③最好能将多个操作合并成一个操作。
11. 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:” i am a little boy. “,变成”i am a little boy”,C++语言实现,不要用伪代码作答,函数输入输出请参考如下的函数原型:C++函数原型: void FormatString(char str<>,int len){ }#include<stdio.h>#include <string.h> void FormatString(char str<>,int len){ if (str == NULL || len <= 0) { return; } int i = 0; int j = 0; if (str == ' ') { while (str == ' ') { ++i; } } while (str != '\0') { if (str == ' ' && str == ' ' || str == '\0') { ++i; continue; } str
更多大厂面试资料(腾讯、阿里、华为等)后台私信“1”获取