为了账号安全,请及时绑定邮箱和手机立即绑定

检查一维数组是否是另一个二维数组的每一行的子集

检查一维数组是否是另一个二维数组的每一行的子集

小唯快跑啊 2022-07-06 16:58:01
假设有一个一维数组test[]={1,2,3}和一个二维数组arr1[3][5]={{1,2,5,4,3},{3,7,1,4,2},{2,9,7,8,3}}。作为输出所需的内容如下:test is the subset of row 0 of arr1test is the subset of row 1 of arr1test is not the subset of row 2 of arr1这是我到目前为止实现的代码:class GFG {    public static void main(String args[]) {        int arr1[][] = { { 11, 1, 13, 3, 7 },                          { 11, 1, 17, 7, 3 },                          { 2, 5, 8, 9, 10 } };        int test[] = { 11, 3, 7, 1 };        int m = arr1.length; // rows        int n = test.length;        int o = arr1[0].length; // no. of elements in each row        System.out.println(o); // just for testing if it works        int i = 0;        int j = 0;        int k = 0;        for (i = 0; i < n; i++) {            for (j = 0; j < m && j != m; j++) {                for (k = 0; k < o; k++)                    if (test[i] == arr1[j][k])                        break;                if (k == o)                    System.out.println("test[] is " + "not a subset of arr1 " + j + " row");                else                    System.out.println("test[] is " + "subset of arr1 " + j + " row");            }        }    }}但我得到的输出是:我意识到这是 i 循环重复打印它,但在这种情况下我仍然没有得到令人满意的输出。在这里可以做什么?或者这个问题有很多优化的实现吗?欢迎任何建议。
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

你搞砸了循环的顺序:你应该先迭代arr。这个想法是 ti 使用 flags: isSubset,当在一行中找不到某个元素时,它变为 false,contains如果当前检查的元素在一行中,则变为 true。


可以进行一些改进(如 foreach 循环和标记中断),但我决定保持代码简单。


public class GFG {

    public static void main(String args[]) {

        int arr[][] = { { 11, 1, 13, 3, 7 }, 

                         { 11, 1, 17, 7, 3 }, 

                         { 2, 5, 8, 9, 10 } };


        int test[] = { 11, 3, 7, 1 };



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

            boolean isSubset = true;

            for (int j = 0; j < test.length; j++) {

                boolean contains = false;

                for (int k = 0; k < arr[i].length; k++) {

                    if (test[j] == arr[i][k]) {

                        contains = true;

                        break;

                    }

                }

                if (!contains) {

                    isSubset = false;

                    break;

                }

            }

            if (isSubset) {

                System.out.println("test[] is " + "subset of arr " + i + " row");

            } else {

                System.out.println("test[] is " + "not a subset of arr " + i + " row");

            }

        }

    }

}


查看完整回答
反对 回复 2022-07-06
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

尝试将您的解决方案分解为更小的方法,这样您的代码会更清晰,您可以更容易地想到发生了什么。这是一个如何完成的示例:


class GFG {

  public static void main(String args[]) {

    int arr1[][] = { { 11, 1, 13, 3, 7 },

          { 11, 1, 17, 7, 3 },

          { 2, 5, 8, 9, 10 } };

    int test[] = { 11, 3, 7, 1 };


    System.out.println(arr1[0].length); // just for testing if it works


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

      if (isSubset(test, arr1[i])) {

        System.out.println("test[] is " + "subset of arr1 " + i + " row");

      } else {

        System.out.println("test[] is " + "not a subset of arr1 " + i + " row");

      }

    }

  }


  /* returns true if arr contains all elements of sub */

  static boolean isSubset(int[] sub, int[] arr) {

    for (int e : sub) {

      if (!contains(e, arr)) return false;

    }

    return true;

  }


  /* returns true if arr contains elem */

  static boolean contains(int elem, int[] arr) {

    for (int e : arr) {

      if (elem == e) return true;

    }

    return false;

  }

}


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号