T1: 不同的平均值数目

思路:排序 + 双指针 + 哈希存储

public int distinctAverages(int[] nums) {
Arrays.sort(nums);
Set<Double> set = new HashSet<>(); int i = 0, j = nums.length - 1;
while (i < j) {
double mid = (nums[i] + nums[j]) / 2.0;
if (!set.contains(mid)) {
set.add(mid);
} i += 1;
j -= 1;
} return set.size();
}

T2: 统计构造好字符串的方案数

思路:动态规划

  • 状态定义:dp[i]表示长度为 i 字符串的构造方案数

  • 初始状态:dp[0] = 1 表示空白字符串方案数为 1

  • 状态转移: \(dp[i] = (dp[i - zero] + dp[i - one]) \% MOD\)

public static final int MOD = 1000000007;
public int countGoodStrings(int low, int high, int zero, int one) {
int res = 0; int[] dp = new int[high + 1];
dp[0] = 1; for (int i = 1; i <= high; ++i) {
if (i >= zero) {
dp[i] = (dp[i] + dp[i - zero]) % MOD;
} if (i >= one) {
dp[i] = (dp[i] + dp[i - one]) % MOD;
} if (i >= low) {
res = (res + dp[i]) % MOD;
}
} return res;
}

T3: 树上最大得分和路径

思路:两次DFS

  • 第一次DFS,记录Bob经过每个点的时间

  • 第二次DFS,记录Alice到每个叶节点,计算最大值

public int ans = Integer.MIN_VALUE;
public int mostProfitablePath(int[][] edges, int bob, int[] amount) {
// Build Tree
int n = amount.length;
List<Integer>[] tree = new List[n];
for (int i = 0; i < n; i++) {
tree[i] = new ArrayList<>();
} for (int[] edge : edges) {
int x = edge[0];
int y = edge[1]; tree[x].add(y);
tree[y].add(x);
} int[] bobTime = new int[n];
Arrays.fill(bobTime, n);
dfs_bob(tree, bobTime, bob, -1, 0); // 区分根节点与叶子节点
tree[0].add(-1);
dfs_alice(tree, amount, bobTime, 0, -1, 0, 0);
return ans;
} /**
*
* @param tree:树
* @param bobTime:bob路径上经过每个节点的时间数组
* @param cur:当前节点
* @param last:上一个节点
* @param t:当前时间
* @return
*/
public boolean dfs_bob(List<Integer>[] tree, int[] bobTime, int cur, int last, int t) {
if (cur == 0) {
bobTime[cur] = t;
return true;
} for (int next : tree[cur]) {
// 可用顺利走到根节点的路径才标记
// next != last: 避免循环访问
if (next != last && dfs_bob(tree, bobTime, next, cur, t + 1)) {
bobTime[cur] = t;
return true;
}
} return false;
} /**
*
* @param tree: 树
* @param amount: 分值数组
* @param bobTime: bob路径上经过每个节点的时间数组
* @param cur: 当前节点
* @param last: 上一个节点
* @param t: 时间
* @param temp: 当前路径分值
*/
public void dfs_alice(List<Integer>[] tree, int[] amount, int[] bobTime, int cur, int last, int t, int temp) {
if (t < bobTime[cur]) {
temp += amount[cur];
}
else if (t == bobTime[cur]) {
temp += amount[cur] / 2;
} // 到达叶节点
if (tree[cur].size() == 1) {
ans = Math.max(ans, temp);
return;
} for (int next : tree[cur]) {
if (next != last) {
dfs_alice(tree, amount, bobTime, next, cur, t + 1, temp);
}
}
}

T4: 根据限制分割消息

思路:枚举分割个数 i,计算每个个数能容纳的字符总数,得到 message 需要的分割个数

public String[] splitMessage(String message, int limit) {
int n = message.length(); // 枚举分割个数 i, 计算其容量
int i = 1;
int cap = 0;
int tail_length = 0; // cap >= n, 则说明该分割次数符合要求
while (true) {
if (i < 10) {
tail_length = 5;
}
else if (i < 100) {
if (i == 10) {
cap -= 9;
}
tail_length = 7;
}
else if (i < 1000) {
if (i == 100) {
cap -= 99;
}
tail_length = 9;
}
else {
if (i == 1000) {
cap -= 999;
}
tail_length = 11;
} // tail长度大于等于limit, 则无法分割
if (tail_length >= limit) {
return new String[]{};
} cap += limit - tail_length;
if (cap >= n) {
break;
} i += 1;
} String[] ans = new String[i];
int index = 0;
for (int j = 0; j < i; j++) {
String tail = "<" + (j + 1) + "/" + i + ">"; if (j == i - 1) {
ans[j] = message.substring(index) + tail;
}
else {
int len = limit - tail.length();
ans[j] = message.substring(index, index + len) + tail;
index += len;
}
} return ans;
}

LeeCode 91双周赛复盘的更多相关文章

  1. leetcode 双周赛9 进击的骑士

    一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似,走 “日” 字:即先向左(或右 ...

  2. leetcode 双周赛9 找出所有行中最小公共元素

    给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1. 示例: 输入:mat = [[,,,,] ...

  3. LeetCode第8场双周赛(Java)

    这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...

  4. LeetCode 第 15 场双周赛

    1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...

  5. LeetCode 第 14 场双周赛

    基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...

  6. leetcode-15双周赛-1286-字母组合迭代器

    题目描述: 方法: class CombinationIterator: def __init__(self, characters: str, combinationLength: int): se ...

  7. leetcode-15双周赛-1287-有序数组中出现次数超过25%的元素

    题目描述: 方法一:二分法 class Solution: def findSpecialInteger(self, arr: List[int]) -> int: span = len(arr ...

  8. leetcode-15双周赛-1288-删除被覆盖区间

    题目描述: 方法一:排序O(Nlogn) class Solution: def removeCoveredIntervals(self, intervals: List[List[int]]) -& ...

  9. leetcode-15双周赛-1289-下降路径最小和

    题目描述: 方法一:动态规划 O(N^3) class Solution: def minFallingPathSum(self, arr: List[List[int]]) -> int: n ...

  10. leetcode-第14周双周赛-1274-矩形内船只的数目

    题目描述: 自己的提交: # """ # This is Sea's API interface. # You should not implement it, or s ...

随机推荐

  1. vue、react配置gzip打包后,删除源文件deleteOriginalAssets: true,nginx需要的配置

    1.删除源文件后,配置了gzip,当配置gzip删除源文件后,解决前端history问题,就会出现所有的都返回html,请求js.css也会返回html,页面会报错,如下配置即可 location / ...

  2. IntelliJ IDEA 最新激活破解教程,永久激活,亲测有效

    使用ja-netfilter激活Jetbrains系列软件 注意:无限试用脚本已经失效.本教程适合2021.3.*之上的高版本,使用ja-netfilter插件进行激活操作,永久有效 激活步骤: 第一 ...

  3. OO_Lab2总结博客

    OO_Lab2 一.单元内容 本单元内容为规格化设计,即通过参考已经完成的JML描述实现一个社交网络相关功能. 本单元整体来说难度不大,但是却是我最惨的一次作业,所以本博客可能会主要谈一谈测试中的一些 ...

  4. DBeaver通过phoenix连接云主机的hbase

    准备 1.云主机上已经安装好jdk.hadoop.hbase.zookeeper.phoenix,并且在主机上测试连接成功.可参考 https://blog.csdn.net/shangxindeku ...

  5. 【再学WPF】模板

    1 <!--设置所有的按钮样式--> 2 <Style TargetType="Button"> 3 <Setter Property="M ...

  6. requests使用socks代理

    requests在2.10.0版本开始支持socks代理 自己搭了个服务器所以就想顺便用一下. import requests url = 'xxx' my_proxies={"http&q ...

  7. Windows10电源选项:睡眠、休眠、启用快速启动

    参考链接: http://www.dnpz.net/diannaozhishi/2223.html http://www.cfan.com.cn/2018/0118/130151.shtml 在介绍w ...

  8. PyQt5高级窗口组件

    https://blog.csdn.net/A642960662/article/details/123093350?utm_medium=distribute.pc_aggpage_search_r ...

  9. webservice学习随笔(二):通过cxf实现webservice

    一:基本概念(可跳过) Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基 ...

  10. Java笔记第四弹

    File类创建功能 public boolean createNewFile();//当该文件名不存在时,创建一个由该抽象路径名命名的新空文件 public boolean mkdir();//创建由 ...