2022年7月22日 第一组 周鹏 我的天啊!算法是什么玩意儿啊!!!!累死了!!!

直接看题吧,好累啊

 

 

这个题前面做着不难,后面如何判断不重复的三元组,是真的麻烦,由于现在还没学集合什么的,只能靠数组,二位又不会扩列,简直了!!!

 

 int[]nums = {-1,0,1,2,-1,-4,4};
        int a = 0;
        int c = 0;
        int b =0;

        int []d = new int[3];
        if(nums.length<3){
            System.out.println("[]");
        }else {
            for (int i = 0; i < nums.length - 2; i++) {
                for (int j = 0; j < nums.length - 1; j++) {
                    for (int l = 0; l < nums.length; l++) {
                        if (nums[i] + nums[j] + nums[l] == 0) {
                            //最大数
                            a = (nums[i] > nums[j] ? nums[i] : nums[j]) > nums[l] ? (nums[i] > nums[j] ? nums[i] : nums[j]) : nums[l];
                            //最小数
                            c = (nums[i] < nums[j] ? nums[i] : nums[j]) < nums[l] ? (nums[i] < nums[j] ? nums[i] : nums[j]) : nums[l];
                            //中间数
                            b = (a + c) * -1;
                            int m = 0;//记录是否有相等的项
                            for (int n = 0; n < d.length; n = n + 3) {//判断是否有相等

                                if (c == d[n] && b == d[n + 1] && a == d[n + 2]) {
                                    m++;
                                }
                            }
                            if (m == 0) {
                                if (d[d.length - 1] != 0) {//判断是否需要扩容
                                    int[] e = new int[d.length + 3];
                                    for (int n = 0; n < d.length; n++) {
                                        e[n] = d[n];
                                    }
                                    d = e;

                                    d[d.length - 1] = a;
                                    d[d.length - 2] = b;
                                    d[d.length - 3] = c;
                                } else {
                                    d[d.length - 1] = a;
                                    d[d.length - 2] = b;
                                    d[d.length - 3] = c;
                                }
                            }
                        }
                    }
                }
            }
            for (int n = 0; n < d.length - 3; n = n + 3) {
                System.out.print("[" + d[n] + "," + d[n + 1] + "," + d[n + 2] + " " + "]" + ",");
            }
        }

我这个还有个bug,,就是当数组里面有三个0的时候,是输出不了的,如果有谁有更好的办法,请联系我

posted @ 2022-07-22 20:35  牛杂刻师傅  阅读(30)  评论(0)    收藏  举报