北航计算机机试10判断整数数组相同06排序与数组内容结合

两个整数数组(无序,可有重复元素),判断两个整数数组是否完全相同(重复元素的话,重复次数也要相同)

不知道谁有完整的题目。。
我对北航题目的理解能力有点差–

首先无序重复,若判断是否完全相同的话,最简单的方法我觉得就是先比较数组长度,长度相同的话再排序,然后依次比较,有不同就return,最坏的情况下就是前n-1个元素都相同,第n个元素不同,比较了n次,但最坏情况下也是线性的,算上排序的时间复杂度应该是o(nlogn+n)
这里因为是整数排序,我选用了快速排序,也可以用堆排序,这两个的时间复杂度都是o(nlogn)

quicksort(int a[],int l,int r,int n)
{//l=0;r=n-1,n是元素个数,l和r分别是区间下标
if(l < r)
{    int s=partition(a,l,r,n);
     quicksort(a,l,s-1,s-l);
     quicksort(a,s+1,r,r-s);//递归调用再对子数组排序,此处先对长度小的排序会提高效率
     }
}

int partition(int a[],int l,int r,int n)
{
int p=a[l];
int i=l;
int j=r+1;
do{
  do{
     i+=1;
     }while(a[i]>=p);
  do{
    j-=1;
    }while(a[j]<=p);
    swap(a,i,j);
}while(i>=j);
swap(a,i,j);//当i>=j撤销最后一次交换
swap(a,l,j);
return j;
}

void swap(int a[],int l,int r)
{
        int temp;
        temp=a[l];
        a[l]=a[r];
        a[r]=temp;
}

06年的题目

写一个函数 set_same(int a[],int len1,int b[],int len2) 判断数组a和b所含元素是否都相同 就是说
如果把a和b所含元素按成两个集合 判断是两个集合是否相等 既然是集合 那就不考虑重复元素和顺序了

基本上是一模一样的,只不过这个说明是集合,所以不可能有重复的元素,直接快排就行了。

全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务