自己手写的暴力算法然后抄到计算机上的,没做过输入输出测试,但是思路应该正确,大家看个思路就行,408考试的时候也不硬性要求ac,如果有问题欢迎指正共同学习!
习题顺序参考22版王道书的章节顺序
2010年
void Move(int R[],int p,int n){
//lenth=n
int L[n]={
0}; //Create auxiliary array
for(int i=0;i<n;i++){
if(i-p>=0) L[i-p]=R[i]; //Assign a value to the corresponding position of the auxiliary array
else L[n+i-p]=R[i];
}
for(int i=0;i<n;i++) R[i]=L[i];
}
时间复杂度O(n),空间复杂度O(n)
2011年
int midSerch(int a[],int b[],int n){
int c[2*n]={
0};
int i;
for(i=0;i<2*n;i++){
if(i<n) c[i]=a[i];
else c[i]=b[i-n];
quickSort(c,0,2*n-1);
return c[n-1];
}
}
void quickSort(int q[],int l,int r){
//Quick sort template
if(l>=r) return;
int x=q[l + r >> 1],i=l,j=r;
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,i-1);
quick_sort(q,i,r);
}
2013年
int mainElement(int A[],int n){
int B[n]={
0},i;
for(i=0;i<n;i++) B[A[i]]++;
int max=0;
for(i=0;i<n;i++){
//Traverse the auxiliary array to find the maximum number of occurrences
if(B[i]>B[max]) max=i;
}
if(B[max>n/2]) return max;
else return -1;
}
时间复杂度O(n),空间复杂度O(n)
2018年
int findMin(int L[],int n){
int i=1,k=0;
while(i<=n){
for(k=0;k<n;k++){
if(L[k]==i){
i++;
break;
} //找到后,+1跳出循环
}
if(k==n) return i; //若k=n-1,说明没找到,直接返回
}
return i;
}
时间复杂度O(n^2),空间复杂度O(1)
2020年
int solution(int a[],int b[],int c[],int n1,int n2,int n3){
int i=0,j=0,k=0,dis=0;
int min=99999;
for(i=0;i<n1;i++){
for(int j=0;j<n2;j++){
for(int k=0;k<n3;k++){
dis=abs(a[i]-b[j])+abs(b[j]-c[k])+abs(c[k]-a[i]);//abs为求绝对值函数
if(dis<min) min=dis;
}
}
}
return dis;
}
int abs(int a){
if(a<0) return -a;
else return a;
}
时间复杂度O(n^3)空间O1
2009年
/*
设置两个指针p,q,一个变量count,p一直遍历到最后,count负责计数,
然后将q遍历到count-k次,最后输出
*/
typedef struct LNode{
int data;
struct LNode *link;
}LNode,*Linklist
int SearchLink(Linklist list,int k){
int count=0;
Lnode *p=list->link,*q=*p;
while(p->link!=NULL){
count++;
p=p->link;
}
if(count<k) return 0;
while(count-k>0){
q=q->link;
count--;
}
printf("%d",q->data);
return 1;
}
时间复杂度O(mn),空间复杂度O(1)
2012年
思想:设置两个数组p,q,分别指向两个链表头节点,两个循环,p向后一步,q就遍历一遍,直到相等
typedef struct LNode{
char data,
struct LNode *next,
}*LinkList,LNode;
LNode *same_tail(LinkList str1,LinkList str2){
LNode *p=str1->next,*q=str2->next;
while(p->next!=NULL){
while(q->next!=NULL){
if(p==q) return p;
q=q->next;
}
q=str2->next;
p=p->next;
}
}
时间复杂度O(mn)
有人看的话后面就慢慢更新,没人看就算了