【问题标题】:Checks if n elements in one array comes before n elements in another array检查一个数组中的 n 个元素是否在另一个数组中的 n 个元素之前
【发布时间】:2016-03-12 13:44:25
【问题描述】:

Java:我想比较 2 个数组,我想知道数组 s 中的前 n 个条目是否按字典顺序排在数组 t 中的前 n 个条目之前,换句话说,如果 n = 4 then ('b ''i''n''a''r''y') 小于 ('b''i''n''d')。因为二进制 'a' 的第 4 个元素出现在 bind 'd' 的第 4 个元素之前 我真的很纠结这个

@Override
public boolean lessThan(char[] s, char[] t, int n) {



    for (int i = 0; i < n; i ++){


        if (s[i] > t[i]){

            return true;

        }


    }

    return false;

}

【问题讨论】:

  • s[s.length-1]
  • 如果排序好了
  • 我不明白这个问题。
  • @yassin hajaj,如果数组 s 的前 n 个元素小于字典中数组 t 的前 n 个元素,则该方法应返回 true。例如“binary”小于“bind”,因为“binary”中的第 4 个字母“a”在“bind”中的第 4 个字母“d”之前
  • Nit:这个方法的名字(或逻辑)是错误的:如果s的前n个字符小于或等于前n个字符,则返回true吨。

标签: java arrays loops comparison


【解决方案1】:

检查每个字符的 ASCII 字符应该可以工作。

public boolean lessThan(char[] s, char[] t, int n) {
        boolean isLess = true;
        for (int i = 0; i < n; i++) {
            if((int) t[i] > (int) s[i]){
                isLess = false;
            }
        }
        return isLess;
    }

【讨论】:

  • 错误,该代码无法确定数组 s 的前 n 个元素是否小于数组 t 的前 n 个元素(按字典顺序)
  • 当然,如果数组 s 的前 n 个元素按字典顺序小于数组 t 的前 n 个元素,则该方法应返回 true。例如,数组 s 中的“binary”小于数组 t 中的“bind”,因为“binary”中的第 4 个字母(即“a”)在字典顺序中的“bind”中的第 4 个字母(即“d”)之前。并且因此 s 中的前 n 个元素小于 t 中的前 n 个元素,它应该返回 true
  • Nit:这个方法的名字(或逻辑)是错误的:如果s的前n个字符小于或等于前n个字符,则返回true吨。
  • 如果 s 的前 n 个字符小于 t,则 isLess = true。否则 isLess = false
  • 挑剔 2:char 不是 ASCII;它是 Unicode/UTF-16。 (与 .NET、JavaScript 等相同)
【解决方案2】:

构建字符串并比较它们

return new String(s, 0, n).compareTo(new String(t, 0, n) < 0;

【讨论】:

  • 非常感谢安迪,我无法告诉你那行代码对我有多大帮助!
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多