weixin_42327899 2009-09-11 15:24
浏览 247
已采纳

有一个数组M有一些数据,另一个数组N也有一些数据,M中的一些数据N中也有,请有最少循环找出相同的数据

有一个数组M有一些数据,另一个数组N也有一些数据,M中的一些数据N中也有,请有最少循环找出相同的数据

我有了一个方法.
package com.xlh.dao;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class SecondFind {

static int[] M = new int[] { 2, 4, 5, 8, 65, 81 };
static int[] N = new int[] { 8, 5, 45, 57, 89, 6, 4, 65, 1, 5, 2 };
static HashMap m = new HashMap();
static int count = 0;

public static void main(String[] args) {
    // 输出M和N的长度
    System.out.println("M的长度为=" + M.length);
    System.out.println("N的长度为=" + N.length);

    // find(M,N) ;
    // 试试哈希表
    hash();
    System.out.println("循环了多少次count=" + count);

}

//哈希算法
public static void hash() {
    for (int i = 0; i < M.length; i++) {
        m.put(i, M[i]);
        count++;
    }
    for (int i = 0; i < N.length; i++) {
            //将N的数放到M哈希表的时候判断一下是否有一样的.
         if (m.containsValue(N[i])) {
            System.out.println("N["+i+"]="+N[i]) ; 
         } else {
          m.put(count,N[i]) ;
         }
          count++ ;
    }

}

// 先用最笨的方法
public static void find(int[] a, int[] b) {
    for (int i = 0; i < M.length; i++) {
        for (int j = 0; j < N.length; j++) {
            if (M[i] == N[j]) {
                System.out.println(M[i]);
                // break ;
            }
            count++;
        }
    }

}

}

  • 写回答

2条回答 默认 最新

  • Ryankay 2009-09-11 20:49
    关注

    我在楼主的基础上做了一些改进,通过测试结果我们得出结论。

    list()<hash() , bestlist()<besthash()

    说明使用list执行上述操作的效率比hashMap高。

    bestlist()<list()
    besthash()<besthash()

    说明使用长度较大方作为基数与较小方循环判断更有效。

    我觉得光考虑次数是不够的,执行时间更为重要,题目要求最小次数的目的最终还是为了追求性能。

    以上代码可以直接copy运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料