|
|
|
|
package class27;
|
|
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
|
|
public class Code02_MinPeople {
|
|
|
|
|
|
|
|
|
|
// 三道题如下:
|
|
|
|
|
// 微信面试题
|
|
|
|
|
// 题目一:
|
|
|
|
|
// 股民小 A 有一天穿越回到了 n 天前,他能记住某只股票连续 n 天的价格;他手上有足够多的启动资金,他可以在这 n 天内多次交易,但是有个限制
|
|
|
|
|
// 如果已经购买了一个股票,在卖出它之前就不能再继续购买股票了。
|
|
|
|
|
// 到 n 天之后,小 A 不能再持有股票。
|
|
|
|
|
// 求问 这 n 天内,小 A 能够获得的利润的最大值
|
|
|
|
|
// 如果不需要手续费的话,求最大的利润
|
|
|
|
|
// function(number) {
|
|
|
|
|
// return number
|
|
|
|
|
// }
|
|
|
|
|
// 输入: prices = [3, 1, 2, 8, 5, 9]
|
|
|
|
|
// 输出: 11
|
|
|
|
|
//
|
|
|
|
|
// 题目二:
|
|
|
|
|
// 企鹅厂每年都会发文化衫,文化衫有很多种,厂庆的时候,企鹅们都需要穿文化衫来拍照
|
|
|
|
|
// 一次采访中,记者随机遇到的企鹅,企鹅会告诉记者还有多少企鹅跟他穿一种文化衫
|
|
|
|
|
// 我们将这些回答放在 answers 数组里,返回鹅厂中企鹅的最少数量。
|
|
|
|
|
// 输入: answers = [1] 输出:2
|
|
|
|
|
// 输入: answers = [1, 1, 2] 输出:5
|
|
|
|
|
// Leetcode题目:https://leetcode.com/problems/rabbits-in-forest/
|
|
|
|
|
//
|
|
|
|
|
// 题目三:
|
|
|
|
|
// WXG 的秘书有一堆的文件袋,现在秘书需要把文件袋嵌套收纳起来。请你帮他计算下,最大嵌套数量。
|
|
|
|
|
// 给你一个二维整数数组 folders ,其中 folders[i] = [wi, hi] ,表示第 i 个文件袋的宽度和长度
|
|
|
|
|
// 当某一个文件袋的宽度和长度都比这个另外一个文件袋大的时候,前者就能把后者装起来,称之为一组文件袋。
|
|
|
|
|
// 请计算,最大的一组文件袋的数量是多少。
|
|
|
|
|
// 实例
|
|
|
|
|
// 输入:[[6,10],[11,14],[6,1],[16,14],[13,2]]
|
|
|
|
|
// 输出: 3
|
|
|
|
|
|
|
|
|
|
// 题目一,股票系列专题,大厂刷题班15节
|
|
|
|
|
// 题目三,最长递增子序列专题,大厂刷题班第9节
|
|
|
|
|
// 我们来讲一下题目二
|
|
|
|
|
public static int numRabbits(int[] arr) {
|
|
|
|
|
if (arr == null || arr.length == 0) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
Arrays.sort(arr);
|
|
|
|
|
int x = arr[0];
|
|
|
|
|
int c = 1;
|
|
|
|
|
int ans = 0;
|
|
|
|
|
for (int i = 1; i < arr.length; i++) {
|
|
|
|
|
if (x != arr[i]) {
|
|
|
|
|
ans += ((c + x) / (x + 1)) * (x + 1);
|
|
|
|
|
x = arr[i];
|
|
|
|
|
c = 1;
|
|
|
|
|
} else {
|
|
|
|
|
c++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ans + ((c + x) / (x + 1)) * (x + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|