首页 > 拼多多第二题
头像
陈陈201909272146247
编辑于 2020-08-02 22:47
+ 关注

拼多多第二题

解题思路:
不管你妹的怎么变,老子都要把你变成能变成的旋转的最小值。然后写一个hashmap,key是变化后的最小值,value是出现的次数。
重点:
旋转变化,怎么旋转的我是没有搞懂,就看出一个规律,两个一队共分三对。如果队位置不变,队内顺序变化,就找另一个队来进行同样的队内交换。如果队位置改变,那个跟这个队进行交换的队,这两个中选一个队交换队内顺序。
使用递归来进行排序,首先找到最小的值,将他放到没排好位置的首位,然后做对应的旋转。然后将排序好的个数加2继续排序,直到前两个小队都拍好,就结束排序。
基本没毛病了,来展示才艺。
public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
            Map<String,Integer> hashMap=new HashMap<>();
            int n = scanner.nextInt();
            for (int i=0;i<n;i++){
                int [] a=new int[6];
                for (int j=0;j<6;j++){
                    a[j]=scanner.nextInt();
                }
                swap(a,0);
                String s = Arrays.toString(a);
                if (hashMap.containsKey(s)){
                    Integer integer = hashMap.get(s);
                    hashMap.put(s,integer+1);
                }else {
                    hashMap.put(s,1);
                }
            }
            System.out.println(hashMap.size());
            Collection<Integer> values = hashMap.values();
            int []a=new int[values.size()];
            int k=0;
            for (Integer value : values) {
                a[k++]=value;
            }

            Arrays.sort(a);
            for (int i=a.length-1;i>=0;i--){
                if (i==0){
                    System.out.print(a[i]);
                }else {
                    System.out.print(a[i] + " ");
                }
            }
            System.out.println();


        }


    }

    private static void swap(int[] a,int left) {
        if (left<4) {
            int index = 0;
            int min=Integer.MAX_VALUE;
            for (int i = left; i <6; i++) {
                if (a[i] <min) {
                    min=a[i];
                    index = i;
                }
            }
            if (index==left){

            } else if (index-left==1){
                int tmp=a[left];
                a[left]=a[index];
                a[index]=tmp;

                tmp=a[4];
                a[4]=a[5];
                a[5]=tmp;
            } else if (index%2==0){
                //直接反转不用变形
                int tmp=a[left];
                int tmp2=a[left+1];
                a[left]=a[index];
                a[left+1]=a[index+1];
                a[index]=tmp2;
                a[index+1]=tmp;

            }else {
                int tmp=a[left];
                int tmp2=a[left+1];
                a[left]=a[index];
                a[left+1]=a[index-1];
                a[index-1]=tmp;
                a[index]=tmp2;
            }
            swap(a,left+2);

        }

    }


感言,写了一个小时,最后没时间进行测试,输出的结果写的升序排序都没看出来,难受已经不能形容我现在的感受了。

总结:下次再投pdd我是狗。

全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐