My aim is to find out values of intersection of arrays a and b and store them into a new array c so the printout will be : 3,10,4,8. How do I assign given values to a 3rd array c ?
我的目标是找出数组a和b的交集值并将它们存储到一个新的数组c中,因此打印输出将为:3,10,4,8。如何将给定值分配给第3个数组c?
public static void main(String[] args) {
int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
int[] c;
int i=0;
for(int f=0;f<a.length;f++){
for(int k=0;k<b.length;k++){
if(a[f]==b[k]){
//here should be a line that stores equal values of 2 arrays(a,b) into array c
}
}
}
for (int x=0; x<c.length; x++){
System.out.println(c[i]);
}
}
}
5 个解决方案
#1
9
This should be an easy way to do.
这应该是一个简单的方法。
int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
List<Integer> aList = Arrays.asList(a);
List<Integer> bList = Arrays.asList(b);
aList.retainAll(bList);
System.out.println(" a intersection b "+aList);
int[] c = aList.toArray(new int[0]);
#2
1
public static void main(String[] args) {
int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
int[] c = new int[(int)Math.min(a.length, b.length)];
int i=0;
for(int f=0;f<a.length;f++){
for(int k=0;k<b.length;k++){
if(a[f]==b[k]){
c[i] = a[f];
i++;
}
}
}
for (int x=0; x<i; x++){
System.out.println(c[x]);
}
}
}
Hope it helps. Or if you have time complexity issue then try Java Set.
希望能帮助到你。或者,如果您有时间复杂性问题,请尝试Java Set。
#3
0
First you need to allocate space for your array:
首先,您需要为数组分配空间:
int[] c = new int[SOME_SIZE];
The hard part is figuring out how much SOME_SIZE
should be. Since you are calculating an intersection, the most it can be is the size of the smallest of a
and b
.
困难的部分是弄清楚SOME_SIZE应该是多少。由于您正在计算交叉点,因此最大可能是a和b中最小的交叉点的大小。
Finally, to assign an element in the array, you just do
最后,要在数组中分配一个元素,你就可以了
c[idx] = a[f]
Now you need to keep track of where idx
goes. I suggest starting with idx = 0
and incrementing it each time you find a new element to add to c
.
现在你需要跟踪idx的去向。我建议从idx = 0开始并在每次找到要添加到c的新元素时递增它。
#4
0
if permitted use ArrayList for c, its growable array
如果允许,则使用ArrayList表示c,其可扩展数组
ArrayList c = new ArrayList();
.
.
.
.
.
c.add(a[f]);
also if permitted to sort arrays, i recommend you to sort smaller array and then iterate over larger array and binary search in smaller array.
如果允许对数组进行排序,我建议您对较小的数组进行排序,然后在较小的数组中迭代较大的数组和二进制搜索。
#5
0
You can take a help of temporary variable (but this is basically reinventing the wheel, if you are not required to do so) -
你可以采取临时变量的帮助(但如果你不需要这样做,这基本上是重新发明*) -
int[] c = new int[0];
//...
if(a[f] == b[k]) {
int[] temp = c;
c = new int[c.length + 1];
for(int i=0; i<temp.length; i++) {
c[i] = temp[i];
}
c[c.length - 1] = a[f];
}
//...
#1
9
This should be an easy way to do.
这应该是一个简单的方法。
int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
List<Integer> aList = Arrays.asList(a);
List<Integer> bList = Arrays.asList(b);
aList.retainAll(bList);
System.out.println(" a intersection b "+aList);
int[] c = aList.toArray(new int[0]);
#2
1
public static void main(String[] args) {
int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
int[] c = new int[(int)Math.min(a.length, b.length)];
int i=0;
for(int f=0;f<a.length;f++){
for(int k=0;k<b.length;k++){
if(a[f]==b[k]){
c[i] = a[f];
i++;
}
}
}
for (int x=0; x<i; x++){
System.out.println(c[x]);
}
}
}
Hope it helps. Or if you have time complexity issue then try Java Set.
希望能帮助到你。或者,如果您有时间复杂性问题,请尝试Java Set。
#3
0
First you need to allocate space for your array:
首先,您需要为数组分配空间:
int[] c = new int[SOME_SIZE];
The hard part is figuring out how much SOME_SIZE
should be. Since you are calculating an intersection, the most it can be is the size of the smallest of a
and b
.
困难的部分是弄清楚SOME_SIZE应该是多少。由于您正在计算交叉点,因此最大可能是a和b中最小的交叉点的大小。
Finally, to assign an element in the array, you just do
最后,要在数组中分配一个元素,你就可以了
c[idx] = a[f]
Now you need to keep track of where idx
goes. I suggest starting with idx = 0
and incrementing it each time you find a new element to add to c
.
现在你需要跟踪idx的去向。我建议从idx = 0开始并在每次找到要添加到c的新元素时递增它。
#4
0
if permitted use ArrayList for c, its growable array
如果允许,则使用ArrayList表示c,其可扩展数组
ArrayList c = new ArrayList();
.
.
.
.
.
c.add(a[f]);
also if permitted to sort arrays, i recommend you to sort smaller array and then iterate over larger array and binary search in smaller array.
如果允许对数组进行排序,我建议您对较小的数组进行排序,然后在较小的数组中迭代较大的数组和二进制搜索。
#5
0
You can take a help of temporary variable (but this is basically reinventing the wheel, if you are not required to do so) -
你可以采取临时变量的帮助(但如果你不需要这样做,这基本上是重新发明*) -
int[] c = new int[0];
//...
if(a[f] == b[k]) {
int[] temp = c;
c = new int[c.length + 1];
for(int i=0; i<temp.length; i++) {
c[i] = temp[i];
}
c[c.length - 1] = a[f];
}
//...