首页 > WeBank笔试
头像
Baymax201805281814235
编辑于 2020-09-28 18:22
+ 关注

WeBank笔试 投票

WeBank笔试题目讨论

第一题

没啥好说的应该都过

第二题

第二题我只过了82%不知道为什么,我觉得自己都考虑到了,希望有大神能帮忙解答一下

题目描述:
旋转数组并输出
x为顺时针,y水平反转,z逆时针
package cn.webank;

import java.util.Arrays;
import java.util.Scanner;

public class Demo02 {
    static int m,n;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt()%4;
        int y = scanner.nextInt()%2;
        int z = scanner.nextInt()%4;

        n = scanner.nextInt();
        m = scanner.nextInt();

        int Q = scanner.nextInt();

        Point[] res=new Point[Q];

        for (int i = 0; i < Q; i++) {
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();

            Point p=new Point(x1,y1);
            for (int j = 0; j < x; j++) {
                p=rotateX(p.x,p.y);
                int temp=m;
                m=n;
                n=temp;
            }

            for (int j = 0; j < y; j++) {
                p=rotateY(p.x,p.y);
            }

            for (int j = 0; j < z; j++) {
                p=rotateZ(p.x,p.y);
                int temp=m;
                m=n;
                n=temp;
            }

            res[i]=p;

        }

        Arrays.stream(res).forEach(each-> System.out.println(each.x+" "+each.y));






    }
    public static Point rotateX(int x,int y){
        return new Point(y,n-x+1);
    }

    public static Point rotateZ(int x,int y){
        return new Point(m-y+1,x);
    }

    public static Point rotateY(int x,int y){
        return new Point(x,m-y+1);
    }


}

class Point{
    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}


第三题

第三题代码我只过了18%
package cn.webank;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        int[] arr=new int[n];
        for (int i = 0; i < n; i++) {
            arr[i]=scanner.nextInt();
        }
        int[] res=new int[n];
        for (int i = 0; i < n; i++) {
            res[i]=numXiaoyu(arr,res,i);
        }
        long count=0;
        for (int i = 0; i < n; i++) {
            if (res[i]<2){
                continue;
            }
            if (res[i]==2){
                count++;
            }else {
                count+=res[i]*(res[i]-1)/2;
            }
        }
        System.out.println(count);

    }

    public static int numXiaoyu(int[] arr,int[] res,int index){
        if (index==0){
            return 0;
        }
        for (int i = index-1; i >= 0 ; i--) {
            if (arr[index]>=arr[i]){
                return res[i]+1;
            }
        }
        return 0;
    }
}

主要的想法是动态规划,记录比自己小的数字的数量,并根据数量进行统计,2能够贡献1,更大的数贡献x*(x-1)/2,但是结果只能跑通18%,好像还是6的特殊情况🤐求助呀求助


全部评论

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

推荐话题

相关热帖

近期热帖

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

近期精华帖

热门推荐