在一个数组中,数组结构如下:data0 data1 data2 data3 data4 data5 data6 data7a0001F16 978855 978853 1.11E+07 2.09E+07 9827750 10 9.83E+06
a0001F16 978856 978854 2.09E+07 1.11E+07 9827869 10 -9.83E+06
a0001F21 293103 293102 9225310 9226035 725 04 7.25E+02
a0001F21 978864 978863 1.11E+07 1.11E+07 725 10 7.25E+02
a0001G21 293239 293238 9247787 9226035 21752 04 -2.18E+04
a0001G21 978970 978968 2.09E+07 2.29E+07 1963871 10 1.96E+06
a0001G21 978971 978969 1.11E+07 1.11E+07 21948 10 -2.19E+04
a0001K06 1760 1759 3.53E+07 3.53E+07 796 01 -7.96E+02
a0001K06 120779 120778 1.50E+07 1.50E+07 575 02 5.75E+02
a0001K06 293726 293725 9247877 9248595 718 04 7.18E+02
a0001K06 979249 979247 2.09E+07 2.09E+07 934 10 -9.34E+02
a0001K06 979250 979248 1.11E+07 1.11E+07 575 10 5.75E+02
a0001M11 294021 294020 9173009 1.37E+07 4482711 04 4.48E+06
a0001M11 979422 979419 2.09E+07 2.09E+07 16054 10 -1.61E+04
a0001M11 979421 979420 1.11E+07 1.11E+07 15578 10 1.56E+04
a0001O15 979641 979638 1.11E+07 1.10E+07 57292 10 -5.73E+04
a0001O15 979642 979639 2.09E+07 2.09E+07 13803 10 -1.38E+04
a0001O15 979642 979640 2.09E+07 1.12E+07 9767035 10 -9.77E+06
a0001P23 294471 294470 1.37E+07 9226035 4429685 04 -4.43E+06
a0001P23 569825 569824 1.28E+07 4004990 8810299 06 -8.81E+06
a0001P23 979729 979727 2.09E+07 2.29E+07 1983262 10 1.98E+06
a0001P23 979730 979728 1.11E+07 1.11E+07 40670 10 -4.07E+04
a0002A03 2349 2347 3.53E+07 3.53E+07 570 01 5.70E+02
a0002A03 2350 2348 3.53E+07 3.53E+07 695 01 -6.95E+02
a0002A03 569828 569827 1.28E+07 1.28E+07 570 06 5.70E+02
a0002A03 979733 979731 2.09E+07 2.09E+07 570 10 5.70E+02
a0002A03 979734 979732 1.11E+07 1.11E+07 683 10 -6.83E+02
a0002A03 1153762 1153761 1.13E+07 1.13E+07 683 12 -6.83E+02
a0002A03 1153763 1153761 5607968 1.13E+07 5676261 12 5.68E+06
......
......
......现在想从这些数据中找出满足条件的行的组合.
需满足的条件如下:
1.每个行的组合中,所包含的data0列的标号不能有任意两个是相同的,如不能出现两个a0001F16;
2.每个行的组合中的行的数目是不固定的;
3.每个行的组合中的data6列必需是一样的;
4.每个行的组合中的data3列中所有的数据的最大值减去data4列中所有的数据的最小值小于某一个设定范围region,比如20000;
5.每个行的组合中的data4列中所有的数据的最大值减去data3列中所有的数据的最小值小于某一个设定范围region,同4的region;
6.找出所有这些组合中行数最多一组;
然后再将行数最多一组存入一个新的数组中由于数据很多,需找一个高效的算法,并保证没有组合查找的遗漏,请高手指点;
请在指点时写上所建意算法的思路,谢谢!

解决方案 »

  1.   

    将所有数组装入list;
    for(循环list){
      for(循环数组即list.get(i)){
        if(不满足条件4或者不满足条件5){
          list.remove(i);
        }
      }
    }//缩小范围
    按条件6分组a,按条件1分组b,求ab交集中个数最多的。楼下继续... ...
      

  2.   

    选择顺序 假设数组data[n][8]
    1 条件3:
     遍历数组一次,将data[i][6]的值和每个值出现的次数存入一个map的key和value,比较key的次数是n次;
      从map中比较得出value最大的key值,比较key的次数<n;
      将data[i][6]=key的data[8]数组存入List,操作次数<n;2 条件1
      遍历List一次,将data[0]的值存入一个set,比较下一个data[0]的值和set中的值,重复的删除,操作次数<2n;3 条件4和5
      关键在这两个条件,呵呵,本人也只想的这儿了。