请教一个数组遍历比较的问题

  • 赵总
    已知有十个六位数组,均由1和2两个数字排列组成。

    112112,
    221211,
    :
    :
    :

    现在知道某两组数组完全相同,但不知道其具体位置,需要一个算法来找到这两个相同的数组并标记它们的位置。

    补充一个条件,就是数字依次出现,但不知道出1还是出2,出够6个就自动换组,直至出够10组。

    实在搞的头疼了,求高手赐教,只要算法就行。

    祭扫感谢!

    本帖最后由 赵总 于 2015-1-1 16:15 通过手机版编辑
  • a
    abey
    数什么组啊,全转字符串比不就行了
  • 赵总
    题目是数组遍历,改成字符应该也可以。楼上能说下算法吗
  • 焚岚
    这有啥难的,循环不就好了?比对下来没匹配到的移除后继续循环。
  • y
    ylara
    三个个循环,第一个循环选取一个标准值,第二个循环从标准值下一个位置开始,标准值之后的数都和标准值进行比较,比较过程也是个循环,如果相等,则i和j即为数组下标。
    和冒泡排序有点像,效率比较低。
  • a
    abey
    10个字符串找相同的,这都感觉难的话,你还是别走这条路了
  • j
    jiejieup
    把数组转成字符串,比较一下就可以了。
    例如数组
    112211,
    122111,
    122222

    转成 “112211122111122222”

    所有数组都转成上面的字符串,比较这些字符串里有哪两个是相等的就可以了。

    如果对速度有要求的话,可以把数组编码成一个唯一的数字,然后比较两个数是否相同就可以了。

    [本帖最后由 jiejieup 于 2015-1-1 16:09 编辑]
  • 赵总
    不能确保这个标准值和剩下的9组中的某一组重合啊。因为重合的两组位置不定。
  • 赵总
    能具体说说吗
  • 赵总
    哥,别打击我啊
  • y
    ylara
    你要比了才知道相不相等啊。。。
  • 赵总
    求详细
  • 赵总
    确实如此,实际上我还忘了说一个条件,就是这些1,2是依次无规律出现。凑够6个就自动换行……
  • j
    jiejieup
    md5是一种算法,可以把一组数据转化成一个128bit数,常被用来快速判断文件是否完整。具体请搜索wiki。这里不用md5也可以,自己把数组转化成一个字符串就可以了。
  • c
    cfqxd
    额,这方法N多啊,又没说要求效率,还搞不定?
  • 赵总
    大哥求指点啊
  • j
    jiejieup
    如果是文本文件,直接用正则表达式就可以。如果不懂正则表达式,请花半天时间去学一下,这是每个程序员必需掌握的工具。

    [本帖最后由 jiejieup 于 2015-1-1 16:22 编辑]
  • M
    MacPhisto
    题目限定了1和2,其实就是0和1。
    你可以认为1就是0,2就是1。所以题目给的其实是10个二进制数。
    这10个数转成十进制的范围是0-63.
    循环一边就可以找出来了。
  • a
    abey
    数什么组啊,全转字符串比不就行了
  • k
    kame_lau
    把数组2变成1 1变成0 当2进制计算10进制 然后比较
  • S
    SONIC3D
    代码和题目不符,编辑掉防止误传。

    [本帖最后由 SONIC3D 于 2015-1-1 23:22 编辑]
  • h
    hourousha
    既然已知是数字组成的数组,不理解为什么一群人一上来就下意识转字符串……
    而且这种基础中基础的题,本意一般不是让使用现成的诸如正则表达式相关的库的……
    就如同18楼所说,这东西本质就是10个6bit数的比较。
  • 赵总
    完了,越来越看不懂了
  • 赵总
    不能转换成0和1 只能按要求比较 老师说的……
  • 赵总
    哥,完全看不懂……
  • 陈小锤
    你坛好多乘务员
  • k
    kanjiizamu
    楼主的意思是不是数字是一个一个出现的,到六个就换行逐一打出下一组数组。然后直到出现一组和上述某一组数组重复的数组为止。定位这重复的两组数组的行号?
  • 赵总
    对。这十组数字不是现成的,是一个一个的出来,出够六个就换行。

    在出数字的过程中和已经出完的数组进行对比。

    比如:
    已经出完的数组
    1 2 1 2 1 2
    2 1 1 1 1 1

    正在出的数组
    1

    正在出的数组首先出1,此时和前面已经出的数组比较,暂时有两组,由于出了1,所以第二组对比完第一个数字后就停止。第一组第一个数字是1,符合,就等待当前当前正在出数字的数组出第二个数字,然后再和第一组比较。如果第二个数字出1,则和第一组第二个数字也不同,则放弃正在出数字的数组,等待出够六个数字后,新数组即第四行出现,再依次对比前三行。依次类推。

    求一个快速的方法,效率不记。
  • w
    wuhao0727
    很简单啊。java的话,弄个list,把这些玩意往里扔,扔前用contain判断是否已经有了不就找出重复的了。
  • 赵总
    哥,java不懂啊,我学的c#

    有算法吗,高效一点的……
  • t
    taxidriver
    112112,
    221211

    出完六位的数,每位减1,
    上面两组数就变成
    001001 即0x09
    110100 即0x34
    后面出完六位的数如法炮制,再拿去跟前面的数比较,一有相同的,立即停止,搞定
  • j
    jiejieup
    说真的,楼主你先把问题描述清楚,清楚到白痴都能看得懂位置,文字描述不清就加表格,表格不行再加图片。等把问题能描述清楚了,我估计你也就会做了。我到现在还没理解到底是个什么情况。
  • t
    taxidriver
    这是一种思路,另外一种思路是,每出一位,立即排除已出数组中不可能出现的数

    楼主,搞程序,要自己多想,把思路逻辑理清,理清了才能把需求更清楚表达出来
  • S
    SONIC3D
    那就比我21楼写的还要简单,只要2层循环就够了,不过我懒得写了,你不适合做程序员是已经确定了,早点换专业,不要浪费人生,上帝配数值一块配低了必定有另一块配得很高,你得自己去尽快发掘。:D
  • M
    MacPhisto
    楼主,看来你那个老师出这个题,是为了训练你的字符串操作。那就别讲究什么效率了,多重循环一个一个老老实实比较就行了。
  • s
    sleepd
    到现在也没看懂这个需求怎么办
  • 我也不想注马甲
    港真,楼主趁早转行吧,你不适合干这个。
  • k
    kanjiizamu
    如果判断逻辑是在一个字符出现后触发进行的话,我有个想法,楼主指正啊。如果有两行数字一样,位置也一样的话,那相加的结果应该是六个偶数,否则就是奇数。是否可以循环相加,找出都是偶数的两行呢?可能运算过程很大,我也没验证过。讨论讨论哈