拼多多第二题

解题思路:
不管你妹的怎么变,老子都要把你变成能变成的旋转的最小值。然后写一个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我是狗。
#笔试题目##拼多多#
全部评论
楼主分享下第四个白
点赞 回复 分享
发布于 2020-08-02 22:55

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
牛客76783384...:字节:不要放箭,活捉赵子龙
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务