0

我想检查天气一个 int[] 选项卡是否是一个排列,这意味着 3 个特征:

首先,没有重复

二、数字的范围应该在1到N(size)之间

最后,1 到 N 之间的所有数字都应该出现在排列中

例如 2 2 3 不是排列,因为 2 是重复的, 2 3 4 不是排列,因为 4>N=3 ,也因为缺少数字 1 ...

到目前为止,我修复了重复和范围问题,但我仍然需要强制 1 和 N 之间的所有数字出现在排列中,这是到目前为止的代码:

   public  static boolean isperm(byte[] tab){

  for (int i=0;i<tab.length;i++){

    if (tab[i]>=1 && tab[i]<=tab.length ) {
       for (int j=0;j<tab.length;j++) {
          for (int k=j+1;k<tab.length;k++) {
               if (tab[k]==tab[j]){ // or use .equals()
                      return false;
          }
       }
    }
       return true;          
    } else {
       return false; 
    }
  }
return false; 
}

所以我的问题是验证 int[] 中存在 1 和 N 之间的所有数字的测试

4

3 回答 3

2

我可以提供不同的解决方案吗?

尝试创建一个大小为 的布尔数组tab.length,每列代表一个应该在排列中的数字。现在在你的循环中,检查临时数组中是否已经标记了数字,以及它的大小是否正确。

这样,您可以验证所有数字都是从 1 到 N + 没有重复。最后,只需检查是否所有数组都已标记,并且您已经检查了所有内容。

祝你好运。

于 2013-05-01T07:36:50.443 回答
0

应该是这个

boolean isPermutation(int[] a, int n) {
if (a.length != n) {
        return false;
    }
    Arrays.sort(a);
    for (int i = 0; i < n - 1; i++) {
        if (a[i] != a[i + 1] - 1) {
            return false;
        }
    }
    return true;    
     }
于 2013-05-01T07:51:42.150 回答
0

看起来所有三个必需的特征都可以通过以下方式验证:

(1) 对 int 数组进行排序 (2) 迭代数组并确保从 1 到 len(int array) 的所有项都存在

我不会提供任何伪代码,因为这看起来很像家庭作业。

于 2013-05-01T07:33:07.077 回答