腾讯(Tencent)4.5号后台开发笔试-java题解

第一题,钱币数量问题,注意是1-m全部都能组成。
循环找到最大的小于等于sum+1的值为a[i],则sum+a[i]之内的都可以;
import java.util.Arrays;
import java.util.Scanner;

/**

  • Created by ouyangxizhu on 2019/4/5.
  • /
    public class Tencent1 {
    public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      int m = sc.nextInt();
      int n = sc.nextInt();
      int[] a = new int[n];
      for (int i = 0; i< n; i ++){
          a[i] = sc.nextInt();
      }
      Arrays.sort(a);
      int sum = 0;
      int res = 0;
      if (a[0] != 1){
          System.out.println( -1);
      }else{
          while(true){
              if(sum >= m){
                  System.out.println(res);
                  return;
              }
              for (int i = n - 1; i >= 0; i--){
                  if (a[i] <= sum + 1){
                      sum += a[i];
                      res ++;
                      break;
                  }
              }
          }
    }
}

}

第二题,全部替换01 和 10 ,现在看数一下0和1 的差值就好了

import java.util.Scanner;

/**

  • Created by ouyangxizhu on 2019/4/5.

  • /
    public class Tencent2 {
    public static void main(String args[]) {

      Scanner sc = new Scanner(System.in);
      String n = sc.nextLine();
      String str = sc.nextLine();
    
      while (str.contains("01")){
          str = str.replace("01", "");
      }
      while (str.contains("10")){
         str = str.replace("10", "");
      }
      System.out.println(str.length());

    }
    }
    第三题递归,因为数据量小,不需要剪枝了

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

/**

  • Created by ouyangxizhu on 2019/4/5.

  • /
    public class Tencent3 {
    static ArrayList<Integer> list = new ArrayList<>();
    public static void main(String args[]) {

      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      long[] p = new long[n];
      int[] m = new int[n];
      for (int i = 0; i < n; i ++){
          p[i] = sc.nextLong();
      }
      for (int i = 0; i < n; i ++){
          m[i] = sc.nextInt();
      }
      if(n == 1){
          System.out.println(m[0]);
          return;
      }
    
      Long sum = 0L;
      int res = 0;
      cal(sum, res, p, m, 0);
      Collections.sort(list);
      System.out.println(list.get(0));

    }

    private static void cal(Long sum, int res, long[] p, int[] m, int index) {

      if (index >= p.length){
          list.add(res);
          return;
      }
      if (sum >=  p[index])
          cal(sum, res, p, m, index + 1);
    
      cal(sum + p[index], res + m[index], p, m, index + 1);

    }
    }

#腾讯##笔试题目##题解#
全部评论
大佬第三题是什么思路
点赞 回复 分享
发布于 2019-04-06 08:41
还有输入是什么鬼?
点赞 回复 分享
发布于 2019-04-06 08:53
能详细说下第一题吗
点赞 回复 分享
发布于 2019-04-06 09:01
第三题输入不是50个吗,,,数据不小了,如果特意卡数据,时间复杂度不是会炸吗。
点赞 回复 分享
发布于 2019-04-06 09:03

相关推荐

想顺利毕业的猕猴桃在看牛客:好几个月没面试了,腾讯留面评吗
点赞 评论 收藏
分享
02-11 17:47
已编辑
门头沟学院 Java
神哥不得了:神哥来啦~建议先在网上找一些高频的八股去背,然后再去广泛的背八股,这样的学习会更有效率一些,简历的这两个项目建议换掉,换成两个高质量的项目,这样的话获得面试的比例会更高一点,专业技能的话排版要注意一下,要加句号的话就都加,要不加就都不加,荣誉奖项的话写在教育经历里边吧,这个确实没有太多的含金量
点赞 评论 收藏
分享
评论
点赞
32
分享

创作者周榜

更多
牛客网
牛客企业服务