比较两种不同长度的数组
我正在开发一个Android程序,它将比较使用手势点的手势的相似性。 我有两个像这样的数组:
gest_1 = [120,333,453,564,234,531] gest_2 = [222,432,11,234,223,344,534,523,432,234]
我知道没有办法动态调整其中一个数组的大小,所以我有什么方法可以使用这些数组比较这些手势并返回相似性?
请注意,数组中的数据只是随机输出。
你可以尝试这样的事情:
List similarities = new ArrayList(); for(int i = 0; i < Math.max(gest_1.length, gest_2.length); i++){ if (gest_1[i] == gest_2[i]) similarities.add(gest_1[i]; }
使用HashSet。 对于两个名单的联合,
HashSet hashSet = new HashSet<>(); // Contains the union for(int i = 0; i < array1.length; i++) hashSet.add(array1[i]); for(int i = 0; i < array2.length; i++) hashSet.add(array2[i]);
对于两个列表的交集,
HashSet hashSet = new HashSet<>(); List list = new ArrayList<>(); // Contains the intersection for(int i = 0; i < array1.length; i++) hashSet.add(array1[i]); for(int i = 0; i < array2.length; i++) { if(hashSet.contains(array2[i])) { list.add(array2[i]); } }
试试这个函数它返回数组: –
public static String[] numSame (String[] list1, String[] list2) { int same = 0; for (int i = 0; i <= list1.length-1; i++) { for(int j = 0; j <= list2.length-1; j++) { if (list1[i].equals(list2[j])) { same++; break; } } } String [] array=new String[same]; int p=0; for (int i = 0; i <= list1.length-1; i++) { for(int j = 0; j <= list2.length-1; j++) { if (list1[i].equals(list2[j])) { array[p]= list1[i]+""; System.out.println("array[p] => "+array[p]); p++; break; } } } return array; }
int temp = 0; int[] gest_1 = {120, 333, 453, 564, 234, 531}; int[] gest_2 = {222, 432, 11, 234, 223, 344, 534, 523, 432, 234}; ArrayList g1 = new ArrayList<>(); ArrayList g2 = new ArrayList<>(); for (int i : gest_1) { g1.add(i); } for (int i : gest_2) { g2.add(i); } for (int i : gest_1) { if (g2.contains(i)) { temp++; } // else{ // break; // } } System.out.println(temp + " element(s) are equal ..."); }
空间重要吗? 如果没有,您可以将其中一个数组存储在哈希表中,然后迭代另一个数组,检查该元素是否包含在哈希表中。 这将是O(n)而不是O(nm),但这也会增加算法的大小。
如果你不能做这样的事情,那就需要两个循环。 在内循环通过整个第二个数组递增后检查元素是否相等,外循环将增加第一个数组的索引。 这可能是O(nm)。
上面的想法假设当你说“相似性”时,它意味着一个数组中的任何元素都等于另一个数组中的任何其他元素。
我们认为这两个数组是这样的
int [] array1 = {3,5,4,2,6,1,7,9,8}; int [] array2 = {1,2,3,4,8};
我们的目标是找到类似的价值观。
int[] res; if(array1.length>array2.length){ res=new int[array2.length]; }else{ res=new int[array1.length]; } int k=0; for(int i=0;i
- 如何更新Android应用程序中的SSL证书?
- Android Hello World Exception
- Android绘制2种颜色的圆圈(饼图)
- java.lang.NullPointerException:尝试在空对象引用上调用虚方法’java.lang.String java.lang.Object.toString()’
- 嵌套的postDelayed / Runnable / Handler Android
- 位置每35秒更新一次,并在当前位置绘制一个圆圈
- java中的DateFormat转换问题?
- 使用适配器中的不同数据更新不同ListView中的常用post
- 为什么字节码在直接字段访问时调用Object-> getClass()