2

我正在 Android 上开发一个程序,它将使用手势点比较手势的相似性。我有两个这样的数组:

gest_1 = [120,333,453,564,234,531]
gest_2 = [222,432,11,234,223,344,534,523,432,234]

我知道没有办法动态调整任何一个数组的大小,所以我有什么办法可以使用这些数组比较这两种手势并返回相似度?

请注意,数组中的数据只是随机输入的。

4

6 回答 6

5

使用哈希集。对于两个列表的并集,

HashSet<Integer> 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<Integer> hashSet = new HashSet<>();
List<Integer> 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]);
    }
}
于 2013-04-10T15:51:32.650 回答
1

试试这个函数它返回数组: -

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;
       }  
于 2013-08-28T05:59:17.740 回答
1

You could try something like this:

  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];
  }
于 2013-04-10T15:55:14.710 回答
0

空间重要吗?如果没有,您可以将其中一个数组存储在哈希表中,然后遍历另一个数组,检查该元素是否包含在哈希表中。这将是 O(n) 而不是 O(nm),但这也会增加算法的大小。

如果您无法执行此操作,则需要两个循环。在内部循环通过整个第二个数组增加检查元素是否沿途相等之后,外部循环将增加第一个数组的索引。这可能是 O(nm)。

上述想法假设当您说“相似性”时,它意味着一个数组中的任何元素都等于另一个数组中的任何其他元素。

于 2013-04-10T15:51:13.450 回答
0
        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<Integer> g1 = new ArrayList<>();
        ArrayList<Integer> 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 ...");
    }
于 2013-04-10T15:48:48.603 回答
-2

我们考虑这样的两个数组
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<array1.length;i++)
            {
            for(int j=0;j<array2.length;j++)
                {
                    if(array1[i]==(array2[j]))
                        {
                        res[k]=array1[i];
                            k++;
                            break;

                       }

                }
            }

    for(int l=0;l<res.length;l++){


        System.out.print(res[l]);

    }
于 2015-02-12T04:39:38.907 回答