方法一:针对二维数组的每一个元素对它的同行同列都进行判断,如果是则将flag设为1并且输出,否则设为0;
时间复杂度:o(n^3)
点击(此处)折叠或打开
- #include<stdio.h>
- #define M 20
- int main()
- {
- int data[M][M];
- int row, col, inx, iny, min;
- int flag = 1;
- int i,j;
- int count=0;
- printf("please input the col and row\n");
- scanf("%d%d",&row, &col);
- getchar();//接收‘\n’
- printf("please input the memeber of \n");
- for(inx = 0; inx < row; inx++)
- for(iny = 0; iny < col; iny++)
- scanf("%d",&data[inx][iny]);//输入数组的元素
- for(inx = 0; inx < row; inx++)
- for(iny =0; iny < col; iny++){//对每一个二维元素进行判断
- for(i=0; i < col; i++)
- if(data[inx][iny]>data[inx][i])
- flag = 0;//利用flag进行标志
- for(i=0;i<row&&flag;i++)
- if(data[inx][iny]<data[i][iny])
- flag = 0;
- if(flag==1){
- printf("%d: [%d][%d]; \n",data[inx][iny],inx,iny);
- count++;
- }
- flag =1;}
- printf("gong you %d\n",count);
- return 0;
- }
1 1 1
时间复杂度:最好是 o(n)----------最坏:o(n^2)
- #include<stdio.h>
- #define M 20
- int main()
- {
- int data[M][M];
- int count[M]={0};
- int row, col, inx, iny,i=0;
- int cnt=0;
- printf("please input the col and row\n");
- scanf("%d%d",&row, &col);
- getchar();
- printf("please input the memeber of \n");
- for(inx = 0; inx < row; inx++)
- for(iny = 0; iny < col; iny++)
- scanf("%d",&data[inx][iny]);
- for(inx = 0; inx < row; inx++)
- {
- i = 1;
- count[1]=0;
- count[0] = 1;//记录一行满足条件的个数
- for(iny =1; iny < col; iny++)
- if(data[inx][count[1]] > data[inx][iny])
- {
- i = 1;
- count[0]=1;
- count[1]=iny;//记录行中较小的点的位置。
- }
- else if(data[inx][count[1]]==data[inx][iny])//处理行中有相等的数据
- {
- count[++i]=iny;
- count[0]++;
- }
- i =1;
- while(count[0]>0){
- for(iny = 0; iny < row && data[inx][count[i]]>=data[iny][count[i]]; iny++)
- ;
- if(iny >= row)
- printf("%d: [%d][%d]\n",data[inx][count[i]],inx,count[i]);
- i++;
- count[0]--;
- }
- }
- printf("\n");
- return 0;
- }