2020-4-13-阿里笔试

给一时辰,撸两个代码题。

1 、投票

有n个小动物(1~n号)参与投票。再给定n个数,代表每个小动物崇拜情况。第i个数代表第i个动物的崇拜情况。如果是0,代表它不崇拜任何动物,只能给自己投票。如果不是0,假设是j,那么它投票时可能给自己投,可能跟随j投。请解出每个小动物最高可能的票数。
案例:
4
0 1 2 1
第一行4,表示一共四个动物。
第二行,1号动物无崇拜,2号崇拜1,3号崇拜2,4号崇拜1
输出: 4 2 1 1

分析

  • 要求的是每个动物最高的票数,计算第i个动物的最高票数的时候,无论它有无崇拜对象,投自己一票肯定没毛病。
  • 计算第i个动物的票数时,其他动物尽可能给它投票,第一这时他们不能投自己,第二必须要跟随偶像投票,如果他们有一条崇拜链,偶像的偶像的偶像的偶像…其中某一个是i,就可以跟着i投票(i投自己),这样就是其他动物投给第i动物的情况。
  • 如果这条崇拜链,没有到达动物i,即一直找偶像,尽头是0。说明有的动物无法给i投票。

代码(java)

public static void ali1(){
//  4
//  0 1 2 1
      Scanner in = new Scanner(System.in);
      //动物个数
      int n = in.nextInt();
      int admire [] = new int[n+1];
      for (int i = 1; i < admire.length; i++) {
          admire[i] = in.nextInt();
      }
      //记录每个动物的最高分数 0 ~ n。下标0 舍弃 1~n 动物的最高分
      int maxScore [] = new int[n+1];
      //计算第i动物的最高分 尽可能让这个号的动物多票数
      for (int i = 1; i <= n; i++) {
          //第j号动物 尽量投i
          for(int j = 1;j <= n;j++){
              if(j == i){
                  //自己不管咋样 都要投自己 才可能最高
                  maxScore[i]++;
              }else{
                  //j != i 时 想让j给i投票
                  //j号 看崇拜那个?
                  //j的明星
                  int fans = j;
                  int star = admire[fans];
                  while(star != 0){
                      if(star == i){
                          maxScore[i]++;
                          break;
                      }
                      fans = star;
                      star = admire[fans];
                  }
              }
          }
      }

      for (int i = 1; i < maxScore.length; i++) {
          System.out.println(maxScore[i]);
      }
  }

2、没记下来。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值