-
[JAVA]两个数组取相同元素,能有单层循环的实现么?5
m个元素和n个元素的两个数组(具体没要求,假定没排序,有重复),取其中的相同元素
最近看到个面试题,答案说可以用m+n次循环实现,求算法,最好用java实现。
问题补充:
大部分java库函数实现都用了循环,包括List.contains,Map.containsKey,Map.get等等
排序性能也不高,还是没看到什么好的做法,:(
m+n的说法是我书上看到的,看来这年头书也不可靠了
问题补充:
=============================
To RyanPoy:
谢谢回复先
排序性能怎样,我暂时没测试。
想问下,map的实现没有循环么?Map.Entry.next这样做迭代不是循环么
还有,好多地方提到这题的哈希实现的时候都会说是用空间换时间,但是java里具体怎么实现所谓空间换时间的?
附HashMap的containsKey和get都用到的:
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
问题补充:
===============================
自己测试了一下
首先,hash查找确实快,但是对于这题的情况来说,把array put到hash中要花很长时间,普遍情况下,最快的实现还是楼下RyanPoy的先sort在search,再次感谢。
附:
m=n=1000时
Put array to hashtable use 4,508,120ns
Search with Hashtable use 2,861,880ns, found 1
Search with Sort use 6,227,000ns, found 1
m=n=100000时
Put array to hashtable use 108,423,560ns
Search with Hashtable use 30,892,680ns, found 4
Search with Sort use 59,157,680ns, found 4
数组是random生成的2009年7月22日 23:49
5个答案 按时间排序 按投票排序
-
采纳的答案
Arrays.sort(array_1); Arrays.sort(array_2); int len = array_1.length for (int i = 0; i < len; i++) { if (Arrays.binarySearch(array_2, array_1[i]) != -1) print array_1[i]; }
1) 排序
2)遍历任意数组(如果是短的效果最好,我这里没有做判断)
3)把一个数组的元素在另外一个数组中2分查找,找到表示交集。2009年7月23日 12:07
-
引用
想问下,map的实现没有循环么?Map.Entry.next这样做迭代不是循环么
Map对key的迭代是循环,相当于遍历所有的key。
但是Map对key的定位却不是循环,而是hash
引用
还有,好多地方提到这题的哈希实现的时候都会说是用空间换时间,但是java里具体怎么实现所谓空间换时间的?
这个问题,我想你自己看jdk源代码会更加清楚!
2009年7月27日 09:29
-
引用大部分java库函数实现都用了循环,包括List.contains,Map.containsKey,Map.get等等
排序性能也不高,还是没看到什么好的做法,:(
list确实有遍历。
map确没有了。map是采用了hash的方式。你说他们的性能不高?可有什么具体的测试?
2009年7月24日 09:46
-
import java.util.ArrayList; import java.util.List; public class ListTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList<String>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("4"); list1.add("5"); list1.add("6"); list1.add("7"); list1.add("8"); list1.add("9"); list1.add("10"); list2.add("1"); list2.add("3"); list2.add("8"); System.out.println(sameList(list1, list2)); } public static List<String> sameList(List<String> list1, List<String> list2) { List<String> list = new ArrayList<String>(); String temp; for(int i=0; i < list1.size();i++) { temp = list1.get(i); if(list2.contains(temp)){ list.add(temp); } } return list; } }
2009年7月23日 08:19
相关推荐
第6章 数组-课堂研讨案例6-3-用单层循环实现二维数组的输入输出.c
上述代码虽然能完成任务,但效率较低,因为它涉及两个嵌套的循环,导致计算次数与元素数量的平方成正比。 接下来,我们用`for-each`循环来改进这个例子。MATLAB从R2008a版本开始引入了`containers.Map`类,可以配合...
你可以创建一个名为`printMultiplicationTable`的方法,接受两个参数代表行数和列数。 4. **使用数组或列表**: 如果想进一步提升效率,可以考虑使用二维数组或列表存储乘法结果,然后一次性打印。这种方式在处理...
在模板文件中,我们有两个嵌套的`Volist`标签:外层的`Volist`遍历整个`$food`数组,内层的`Volist`则遍历每个主元素内的`fruits`数组。 外层`Volist`标签: ```html ``` 这里的`name`属性指定了要遍历的变量`...
这里用到了二维数组存储各班成绩,单层循环遍历数组求和,再除以数组长度得到平均值。如果要扩展到三个班级,只需在数据结构和计算逻辑中增加一个维度。 2. 整数排序 这个问题展示了如何对三个整数进行排序。使用...
这个方法只适用于单层JSON对象,即JSON对象中不包含嵌套的JSON对象或数组。如果需要处理嵌套的JSON结构,那么需要递归处理或者使用更复杂的解析库,如Jackson或Gson,它们提供了更强大的JSON操作功能。 在实际开发...
使用Map对象代替数组,主要有以下几个步骤: 1. 在Vue组件的data函数中定义一个Map类型的全局变量,用于存储键值对: ```javascript data() { return { indexMap: new Map() }; } ``` 2. 在组件创建或者获取到...
### Java循环练习知识点详解 #### 1. 打印出100~999之间的所有“水仙花数” **知识点概述:** - **水仙花数定义**:一个三位数,其各位数字的立方和等于该数本身。 - **循环结构**:使用三层嵌套循环来遍历所有...
在Smarty模板中,foreach是一个非常重要的内建函数,用于在模板中遍历数组元素,实现数据的展示。本知识点将详细介绍Smarty模板引擎中foreach内建函数的使用方法,并通过实例分析foreach循环遍历不同类型的数组,...
《神经网络算法与实现——基于Java语言 代码实例》是一本深入探讨神经网络编程的书籍,专注于使用Java语言实现各种神经网络模型。本书通过实际的代码示例,为读者提供了理解神经网络工作原理以及如何在Java环境下...
文档中提到了使用numpy库来实现单层感知器模型,这是因为numpy库为Python提供了强大的数值计算能力,可以方便地处理矩阵运算和数组操作,这对于实现单层感知器这类需要大量矩阵计算的算法是非常必要的。 以上知识点...
- 下标是两个数字时,表示**二维数组**。 - 类似地,还可以有三维数组、四维数组等。 #### 三、一维数组 一维数组是指数组的下标只有一个维度的数组。例如,可以使用一维数组来存储一组连续的数据,如学生的学号...
Java编写的BP神经网络实现,通常是指利用Java编程语言实现的一种反向传播(Backpropagation, BP)神经网络模型,这种模型是人工神经网络中应用最广泛的类型之一,尤其适用于解决非线性分类和回归问题。感知器是神经...
这里使用了嵌套的两个foreach循环来遍历每个学生的所有科目成绩。如果在遍历过程中遇到分数小于60的情况,程序不仅需要中断内层循环,还需要退出外层循环,以停止对其他学生的检查。为了实现这一目标,我们使用了带...
另一种方法是利用Shell数组,将需要对应的元素分别存入两个数组,然后通过for循环按元素的下标进行匹配。 1. 定义两个数组,如`file=(1 2 3)`和`disk=(a b c)`。 2. 使用`seq`命令生成从0到数组长度-1的序列,作为...
**题目描述**:编写一个程序找出两个数的最小公倍数。 **解答**: ```java public class J_Prime { public static void main(String[] args) { int a = 3, b = 4, i; for (i = 1; i > 0; i++) { if (i % a == 0...
1. **算法逻辑**:使用一个简单的循环结构,通过累加前两个月的兔子数量来计算当前月的兔子数量。 2. **变量定义**: - `tmp1` 和 `tmp2` 分别存储前两个月的兔子数量。 - `number` 存储当前月的兔子数量。 3. **...
题目如P84的一(2、3、6、8、9、10)和二(2),可能会要求学生设计并实现使用for循环嵌套的程序,以解决实际问题,比如计算多维数组的元素和,或者实现特定的输出模式。 总之,理解和掌握for循环及其嵌套是C语言...
1. 这两个方法不会修改原数组,它们总是返回一个新数组。 2. flat()和flatMap()方法对原数组中空位的行为是跳过空位,不会在结果数组中出现。 3. flat()和flatMap()都可以与Infinity作为参数配合使用,目的是无论...
这通过初始化一个3x3的浮点型二维数组`a[3][3]`来实现,随后通过嵌套循环读取用户输入的矩阵元素,再通过单层循环计算并输出主对角线元素的总和。 ### 知识点4:有序数组插入新元素 第四个示例演示了如何在一个已...