显示两个不属于这两个数组的数组中的元素

时间:2016-11-28 18:59:17

标签: java arrays algorithm

我写了这段代码来显示只属于任何一个数组的元素。我们可以提高效率吗?

public class App {
public static void main(String[] args){
    int[] a = {1,2,3,4,5,6,7,8,9};
    int[] b = {1,20,3,4,15,13,6,7,8,12};

    for(int i = 0; i < a.length; i++){
        int temp = a[i];
        for(int j = 0; j < b.length; j++){
            if(b[j] == temp){
                b[j] = -1;
                a[i] = -1;
            }
        }
        if(a[i] != -1)
            System.out.print(a[i] + " ");
    }

    for(int i = 0; i < b.length; i++){
        if(b[i] != -1)
            System.out.print(b[i] + " ");
    }
}   
}

2 个答案:

答案 0 :(得分:1)

您的代码以O(m * n)时间复杂度运行,其中mn是数组的大小。

如果可以修改数组,有一些方法可以改善这一点:

  1. 对两个数组进行排序。
  2. 执行与数组的merge-sort合并操作类似的操作,但合并操作是,如果元素相等,则删除它们。
  3. 整体复杂性= O(m * log(m) + n * log (n) + m + n) = O(m * log(m) + n * log(n)) = O(k * log(k))其中k = max(m, n)。请注意,此方法中没有使用额外空间,即空间复杂度为O(1)

答案 1 :(得分:1)

是。当然。 目前,您有一个public ActionResult Create([Bind(Include = "Id, name")] Init init, [Bind(Include = "Id")] Form form) { if (ModelState.IsValid) { db.Init.Add(init); db.SaveChanges(); return RedirectToAction("Index"); } return View(init); } ,其中O(m * n)是数组m的大小,a是数组n的大小。
将第一个数组中的数据复制到bhashset操作,其中O(n)的大小为n。然后,解析第二个数组检查以查看数据是否在ahashset操作)中。
考虑对第二个数组做同样的事情。