设二维数组a[1..m, 1..n] 含有m*n 个整数。 ① 写一个算法判断a中所有元素是否互不相同?输出相关信息(yes/no); ② 试分析算法的时间复杂度。

#define m 3
#define n 4
//检查是否有重复元素
int CheckArr(int arr[m][n],int a,int b)
{
	int i=0;
	int j=0;
	int p=0;
	int q=0;
	for(i=0;i<m;i++)
	{
		for(q=0;q<n;q++)
		{
			for(p=i;p<m;p++)
			{
				for(j=q;j<n;j++)
				{
					if(i==p&&q==j)
					{
						j++;
					}
					//0,1与其他元素相比;0,2与其他元素相比以此类推
					if(arr[i][q]==arr[p][j])
					{
						//有重复元素返回0
						return 0;
					}
				}
			}
		}
	}
	//无重复元素返回1
	return 1;
}
int main()
{
	int arr[m][n];
	int i=0;
	int j=0;
	int c;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("输入数组元素:");
			scanf("%d",&arr[i][j]);
		}
	}
	c=CheckArr(arr,m,n);
	if(!c)
	{
		printf("有重复元素\n");
	}
	else
		printf("无重复元素\n");
	return 0;
}

时间复杂度O((m*n)^2);第一个元素与其他元素最坏需要比较m*n-1;第二个元素需要m*n-2次;以此类推为等差数列,累加得时间复杂度为O((m*n)^2).

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用哈希表的方式来判断二维数组所有元素是否互不相同。 具体实现方法如下: 1. 首先创建一个空的哈希表。 2. 遍历二维数组的每个元素,将其作为键值存入哈希表。若哈希表已经存在该键值,则说明二维数组存在重复元素,返回"no"。 3. 若遍历完整个二维数组后,哈希表不存在重复键值,则说明二维数组所有元素互不相同,返回"yes"。 下面是具体的算法实现代码: ``` function checkUnique(a: array[1..m, 1..n] of integer): string; var hashTable: array[1..m*n] of boolean; i, j, index: integer; begin for i := 1 to m do begin for j := 1 to n do begin index := a[i, j]; if hashTable[index] then begin exit('no'); end else begin hashTable[index] := true; end; end; end; exit('yes'); end; ``` 其,哈希表使用一个布尔类型的一维数组来实现,数组下标为二维数组元素值,数组元素为布尔类型,表示该元素是否已经出现过。在遍历二维数组时,如果哈希表已经存在该元素值,则说明二维数组存在重复元素,直接返回"no";否则将该元素值标记为已出现过。如果遍历完整个二维数组后哈希表不存在重复元素,则返回"yes"。 ### 回答2: 题目要求我们判断一个二维数组的所有元素是否互不相同,可以使用暴力解法、哈希表、排序等多种方法来解决。 暴力解法最为直接,遍历数组的每一个元素,与其他元素逐一比较,若有相同的,则返回"no",否则返回"yes"。该方法的时间复杂度为O(n^2)。 使用哈希表也是一种常见的解法。定义一个哈希表,对于数组的每个元素,如果哈希表已经存在该元素,则表示该元素不唯一,返回"no"。否则将该元素插入哈希表,继续遍历,如果遍历完成后没有返回,则表示所有元素都唯一,输出"yes"。该解法的时间复杂度为O(n)。 还有一种解法是先对数组进行排序,然后遍历数组,逐一比较元素是否相同,若有相同的,则返回"no",否则返回"yes"。该解法的时间复杂度为O(nlogn),但空间复杂度较小。 综上所述,本题的解法有多种,应根据实际情况选择最优解法。 ### 回答3: 题目要求判断一个二维数组的所有元素是否互不相同。这里需要注意的是,二维数组每个元素都是一个整数,而不是一个数组或者其他的结构体。 对于这个问题,我们可以使用一个哈希表来解决。具体的做法如下: 1. 从左到右、从上到下遍历数组a的每一个元素。 2. 对于每一个元素a[i][j],将其作为关键字,在哈希表查找是否已经存在一个相同元素。 3. 如果哈希表不存在相同元素,则将当前元素插入到哈希表,并继续遍历数组的下一个元素。 4. 如果哈希表已经存在相同元素,则表示数组存在重复元素,直接输出"no"并退出算法。 5. 遍历完数组的所有元素后,如果没有找到重复元素,则输出"yes"表示数组所有元素互不相同。 这里需要注意的是,选择一个合适的哈希函数对于哈希表的效率至关重要。一个好的哈希函数能够最大程度上减少哈希冲突的可能性,提高哈希表的查找效率。另外,在插入元素时,需要注意哈希表的扩容问题,以确保哈希表的性能能够得到保证。 综上所述,可以用哈希表算法判断一个二维数组的所有元素是否互不相同,并输出相关信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值