快速查找二维数组的所有峰值,c语言实现最好,python也可以,最好能实现滤波。
简单举例array1=[[1,2,1],[1,3,1],[1,1,1]],能快速查找找最大值(峰值)3的坐标。复杂举例array2=[[1,2,1,2,1,3],[1,3...
简单举例
array1 = [[1, 2, 1], [1, 3, 1], [1, 1, 1]],能快速查找找最大值(峰值)3的坐标。
复杂举例
array2 =[[1, 2, 1, 2, 1, 3],
[1, 3, 3, 3, 2, 2],
[2, 2, 4, 2, 3, 1],
[2, 3, 5, 6, 4, 2],
[1, 2, 4, 3, 2, 1],
[1, 1, 2, 1, 2, 1]]
能快速找到最大峰值6和最小峰值的坐标,能设置把最小峰值2过滤掉。
用算法的时候需要考虑能查找所有的峰值(波峰和波谷),不考虑边界的波峰和波谷。注意:array只有一个峰值,也是二维数组中的最大值,不能用查找最大值的方法找峰值,看清需求,谢谢!!! 展开
array1 = [[1, 2, 1], [1, 3, 1], [1, 1, 1]],能快速查找找最大值(峰值)3的坐标。
复杂举例
array2 =[[1, 2, 1, 2, 1, 3],
[1, 3, 3, 3, 2, 2],
[2, 2, 4, 2, 3, 1],
[2, 3, 5, 6, 4, 2],
[1, 2, 4, 3, 2, 1],
[1, 1, 2, 1, 2, 1]]
能快速找到最大峰值6和最小峰值的坐标,能设置把最小峰值2过滤掉。
用算法的时候需要考虑能查找所有的峰值(波峰和波谷),不考虑边界的波峰和波谷。注意:array只有一个峰值,也是二维数组中的最大值,不能用查找最大值的方法找峰值,看清需求,谢谢!!! 展开
3个回答
展开全部
#include<stdio.h>
#include <stdlib.h>
#include <limits.h>
#include<malloc.h>
#define maxsize 6 //每个波形数据最大采集个数 默认6
typedef struct array1
{
int *data;
struct array1 *next;
}ARR1;
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail);//插入一组波形数据节点 返回尾节点
int findMaxF(ARR1 *arrHead);//查找最大峰值
int removeMinF(ARR1 *arrHead);//移除最小峰值数据组 返回最小峰值
void printfArr(ARR1 *arrHead);//打印数据链表
int main()
{
ARR1 *arrHead=(ARR1 *)malloc(sizeof(ARR1));
arrHead->next=NULL;
ARR1 *arrTail=NULL;
arrTail=addNewArr(arrHead,arrTail);//想插入几组,就调用几次 我就测试6组
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
printf("采集的原数据组为:\n");
printfArr(arrHead);
printf("最大峰值:%d,最小峰值值:%d\n",findMaxF(arrHead),removeMinF(arrHead));
printf("删除最小峰值数据组后的数据为:\n");
printfArr(arrHead);
return 0;
}
void printfArr(ARR1 *arrHead)//打印数据链表
{
while(arrHead->next!=NULL)
{
printf("%d,%d,%d,%d,%d,%d\n",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5]);
arrHead=arrHead->next;
}
}
ARR1 *addNewArr(ARR1 *arrHead,ARR1 *arrTail)//插入一组波形数据 返回尾节点
{
int *data=(int *)malloc(sizeof(int)*maxsize),i;
printf("采集一组波形数据(最大采集个数%d):",maxsize);
for(i=0;i<maxsize;i++)
scanf("%d",&data[i]);
ARR1 顷雀*arrNew=(ARR1 *)malloc(sizeof(ARR1));
arrNew->data=data;
闭唯 arrNew->next=NULL;
if(arrHead->next==NULL)//插入第一组数组 作为首节点
arrHead->next=arrNew;
else
arrTail->next=arrNew;
arrTail=arrNew;
return arrTail;
}
int findMaxF(ARR1 *arrHead)//查找最大峰值
{
int i,maxNum=0,maxf=0;
while(arrHead->next!=NULL)
{
雀态早maxNum=0;
for(i=0;i<maxsize;i++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum>maxf)//获取最大峰值
maxf=maxNum;
arrHead=arrHead->next;
}
return maxf;
}
int removeMinF(ARR1 *arrHead)//移除最小峰值数据组 返回最小峰值
{
int i,maxNum=0,minf=INT_MAX;
ARR1 *minDataSave=NULL,*arrHeadSave=arrHead;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i<maxsize;i++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum<minf)//获取最小峰值
{
minDataSave=arrHead->next;
minf=maxNum;
}
arrHead=arrHead->next;
}
arrHead=arrHeadSave;
//移除最小峰值数据组
while(arrHead->next!=NULL)
{
if(arrHead->next==minDataSave)//删除节点重组链表
{
arrHead->next=minDataSave->next;
minDataSave->next=NULL;
free(minDataSave->data);//释放节点内存
free(minDataSave);
break;
}
arrHead=arrHead->next;
}
return minf;
}
展开全部
array2 = [
[1, 2, 1, 2, 1, 3],
[1, 3, 3, 3, 2, 2],
[2, 2, 4, 2, 3, 1],
[2, 3, 5, 6, 4, 2],
[1, 2, 4, 3, 2, 1],
[1, 1, 2, 1, 2, 1]
]
def get_summit_coordinate(the_list, operation=max):
line_summit = [max(arr) for arr in the_list]
the_summit = operation(line_summit)
line_no = line_summit.index(the_summit)
column_no = array2[line_no].index(the_summit)
return line_no, column_no
def filter_min_summit(the_list, min_summit_line_no):
del the_list[min_summit_line_no]
print(get_summit_coordinate(array2))
min_coordinate = get_summit_coordinate(array2, min)
print(min_coordinate)
filter_min_summit(array2, min_coordinate[0])
print(array2)
[1, 2, 1, 2, 1, 3],
[1, 3, 3, 3, 2, 2],
[2, 2, 4, 2, 3, 1],
[2, 3, 5, 6, 4, 2],
[1, 2, 4, 3, 2, 1],
[1, 1, 2, 1, 2, 1]
]
def get_summit_coordinate(the_list, operation=max):
line_summit = [max(arr) for arr in the_list]
the_summit = operation(line_summit)
line_no = line_summit.index(the_summit)
column_no = array2[line_no].index(the_summit)
return line_no, column_no
def filter_min_summit(the_list, min_summit_line_no):
del the_list[min_summit_line_no]
print(get_summit_coordinate(array2))
min_coordinate = get_summit_coordinate(array2, min)
print(min_coordinate)
filter_min_summit(array2, min_coordinate[0])
print(array2)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有遇到过这样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询