23年12月字节二面面试回顾
1.自我介绍
因为看了你的简历,大概了解了你的情况,今天就不自我介绍了。面试开始之前先了解下你现在的情况?
问1:面试官问了为啥 选择放弃现在的工作,选择面字节?
答1:在日常工作中,发现自己很享受写代码,解决问题的过程,所以打算继续从事互联网的工作。
问2:我们岗位的base在深圳,你确定是没有问题的吗?你现在不在深圳吧?
答2: 没问题,我的目标base地就是深圳。
2.算法题
2.1 热身题
问题描述:我有一个整型数字,比如:1234567, 请你写一个算法能把这个数字进行翻转,变成:7654321。要求:翻转过程中不能把数字转成字符串或者字符进行处理。
我的疑问:
(1)这个数字可能会是负数吗?如果是负数,负号‘-’保持不变,翻转其他数字?
(2)这个数字翻转后如果超过整数的最大值: Integer.MAX_VALUE, 我可以直接返回Integer.MAX_VALUE吗?
2.2 中等难度的算法题:凑零钱问题
问题描述:我有[1, 2, 5, 10, 20, 50, 100, 200, 500] 这样的一堆硬币,如果我需要凑出525这样的一个零钱总数,最少需要多少个硬币?每个硬币可以重复使用多次。如果不能凑出这个零钱总数,则返回-1
代码:
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int n = reader.nextInt(); int aim = reader.nextInt(); int[] arr = new int[n + 1]; for (int i = 1; i <= n; i++) { arr[i] = reader.nextInt(); } int[] dp = new int[aim + 1]; // 完全背包 Arrays.fill(dp, Integer.MAX_VALUE); dp[0] = 0; for (int i = 1; i <= aim; i++) { for (int j = 1; j <= n; j++) { if (i >= arr[j]) { dp[i] = Math.min(dp[i - arr[j]] + 1, dp[i]); } } } if (dp[aim] == Integer.MAX_VALUE) System.out.println(-1); else System.out.println(dp[aim]); } }