1. 如何在多个数组中找到相同的元素
先找数组1和数组2的相同的元素,再找相同的元素这个交集与数组3的交集,依此类推,就可以找到多个数组中相同的元素。
数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
栈内存
在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码中定义一个变量时,java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,java会自动释放掉为该变量所分配的内存空间。
堆内存
堆内存用来存放由new运算符创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。在堆中创建了一个数组或对象后,同时还在栈内存中定义一个特殊的变量。让栈内存中的这个变量的取值等于数组或者对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。
2. 如何在多个数组中找出相同的数组?
循环和不是自己的数组比较 如果出现想等2次 或者以上 则输出
假设a为数组
int i,j,k;
for(i=0;i<a.length;i++){
k=0;//清空计数
for(j=0;j<a.length;j++){
if(i!=j){
if(a[i]==a[j]){ k++; }
}
if(k>=2){println(a[i]); }
}
}
3. 编写C程序,查找在已知的两个从小到大有序的数组中出现的所有相同元素在第一个数组中的位置。
由于你没有说清楚是字符数组还是数值
我给你下面两个函数:
第一个是针对数组元素为数值型的,第二个是针对字符型的
#include
#include
#define M 10
void checkCom(int *a,int *b) //实现查找工能,并输出的函数
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
if(*(a+i)==*(b+j))
{
printf("%2d在第一个字符串中的%2d号位置\n",*(a+i),i);
}
}
}
}
void main()
{
int a[M],b[M],i;
printf("请输入第一个数组的内容(长度为%d):\n",M);
i=0;
do{
scanf("%d",&(a[i]));
i++;
}
while(i<M);
printf("请输入第二个数组的内容(长度为%d):\n",M);
i=0;
do{
scanf("%d",&(b[i]));
i++;
}
while(i<M);
checkCom(a,b);
}
第二个是针对字符串的
#include
#include
#define M 10
void checkCom(char *a,char *b)
{
int i,j;
strlen(a);
strlen(b);
for(i=0;i<strlen(a);i++)
{
for(j=0;j<strlen(b);j++)
{
if(*(a+i)==*(b+j))
{
printf("第二个字符串中的%2c字符出现在第一个字符串中的%2d号位置\n",*(a+i),i);
}
}
}
}
void main()
{
char a[M],b[M]; //
printf("请输入第一个数组的内容(长度小于%d):\n",M);
gets(a);
printf("请输入第二个数组的内容(长度小于%d):\n",M);
gets(b);
checkCom(a,b);
}
4. 高效查找出2个数组中相同的元素
这得看数组元素个数的情况了,若元素较少,直接从数组a中从前到后一次取出一个,与数组b中元素一一对比;若元素很多,前一种方法则为n*n级的,比较慢,这时可以先对两数组分别按相同的方法排序,在同时从两数组取出一个进行对比,若a中当前取出的元素大于b中当前取出的元素,则直接从b中取出下一个与a比较,其他情况以此类推。
5. 判断两个有序数组中是否存在相同的数字
这个问题首先想到的是一个O(nlogn)的算法。就是任意挑选一个数组,遍历这个数组的所有元素,遍历过程中,在另一个数组中对第一个数组中的每个元素进行binary search。用C++实现代码如下:
bool findcommon(int a[],int size1,int b[],int size2){ int i; for(i=0;i<size1;i++) { int start=0,end=size2-1,mid; while(start<=end) { mid=(start+end)/2; if(a[i]==b[mid]) return true; else if (a[i]<b[mid]) end=mid-1; else start=mid+1; } } return false;}后来发现有一个 O(n)算法。因为两个数组都是排好序的。所以只要一次遍历就行了。首先设两个下标,分别初始化为两个数组的起始地址,依次向前推进 。推进的规则是比较两个数组中的数字,小的那个数组的下标向前推进一步,直到任何一个数组的下标到达数组末尾时,如果这时还没碰到相同的数字,说明数组中没有相同的数字。
bool findcommon2(int a[], int size1, int b[], int size2){ int i=0,j=0; while(ib[j]) j++; if(a[i]<b[j]) i++; } return false;
6. C语言,编写程序,通过指针操作,比较两个有序数组中的元素,输出两个数组中第一个相同的元素值
c语言指针2个数组查询比较代码如下:
#include int main(){ int *lpa,*lpb; int a[100],b[100],alen,blen,i,j; printf("输入数组a长度:\n"); scanf("%d",&alen); printf("输入%d个有序数据给数组a\n",alen); for(i=0;i<alen;i++) scanf("%d",&a[i]); printf("输入数组b长度:\n"); scanf("%d",&blen); printf("输入%d个有序数据给数组a\n",alen); for(i=0;i<alen;i++) scanf("%d",&a[i]); //查询比较 lpa=a; for(i=0;i<alen;i++) { lpb=b; for(j=0;j<blen;j++) { if(*lpb==*lpa) break; lpb++; } if(*lpb==*lpa) break; lpa++; } if(*lpb==*lpa) { printf("两数组中发现第一个相同元素:%d",*lpa); } else { printf("两数组中没有发现相同元素"); }}
7. 想要一个程序,将两个数组里的数进行比较找出相同的数,然后存放到一个新的数组中
给你一个好的思路,就是先对两数组分别排序,然后在有序数组里面找相同的就行
8. 如何判断数组中是否存在重复的值
所谓数组,是相同数据类型的元素按一定顺序排列的集合。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
判断数组是是否存在某数据,可以使用循环来遍历查询
代码如下:
function arrayRepeat($_value,$_array=array()){ foreach ($_array as $key => $value) { if($value==$_value){ return TRUE; } } return FALSE; }返回类型为:BOOL,存在则返回TRUE否则返回FALSE
foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:
foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
还能够自定义遍历对象。
完整测试代码如下:
$value) { if($value==$_value){ return TRUE; } } return FALSE; }?>