Skip to content

Commit 6e771ff

Browse files
committed
Refactor Java solution in 3.java to improve code clarity and maintainability by optimizing logic flow and enhancing variable naming.
1 parent ff112d5 commit 6e771ff

7 files changed

Lines changed: 224 additions & 0 deletions

File tree

  • leetcode/Study Plan
  • niuke/daily_problem/25_12-1构造数独
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def maxDepth(self, root: Optional[TreeNode]) -> int:
9+
if root is None:
10+
return 0
11+
return max(self.maxDepth(root.left),self.maxDepth(root.right))+1
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def maxDepth(self, root: Optional[TreeNode]) -> int:
9+
cnt = 0
10+
def dfs(node,depth):
11+
if node is None:
12+
return
13+
depth+=1
14+
nonlocal cnt
15+
cnt = max(cnt,depth)
16+
dfs(node.left,depth)
17+
dfs(node.right,depth)
18+
dfs(root,0)
19+
return cnt
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public:
3+
long long maxRunTime(int n, vector<int>& batteries) {
4+
// 计算所有电池的总容量
5+
long long tot = reduce(batteries.begin(),batteries.end(),0LL);
6+
7+
// 二分查找的左右边界
8+
// 理论上最多能运行 tot/n 分钟(平均分配),所以上界设为 tot/n+1
9+
long long l = 0, r = tot / n + 1;
10+
11+
// 二分查找:找到最大的运行时间 x,使得 n 台电脑可以同时运行 x 分钟
12+
// 使用左闭右开区间 [l, r)
13+
while(l + 1 < r)
14+
{
15+
// 候选的运行时间
16+
long long x = l + (r - l) / 2;
17+
18+
// 计算所有电池能提供的总能量
19+
// 对于每个电池,最多只能给一台电脑供电 x 分钟
20+
// 所以每个电池最多贡献 min(b, x) 的能量
21+
long long sum = 0;
22+
for(long long b : batteries)
23+
{
24+
sum += min(b, x);
25+
}
26+
27+
// 判断:如果总能量 sum >= n * x,说明可以让 n 台电脑运行 x 分钟
28+
// 此时可以尝试更大的 x(更新左边界)
29+
// 否则需要减小 x(更新右边界)
30+
(n * x <= sum ? l : r) = x;
31+
}
32+
33+
// 返回最大的满足条件的运行时间
34+
return l;
35+
}
36+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
impl Solution {
2+
pub fn max_run_time(n: i32, batteries: Vec<i32>) -> i64 {
3+
// 计算所有电池容量的总和
4+
let sum: i64 = batteries.iter().map(|&x| x as i64).sum();
5+
// 将 n 转为 i64 方便计算
6+
let n = n as i64;
7+
// 二分查找的左边界,表示最短运行时间
8+
let mut left: i64 = 0;
9+
// 二分查找的右边界,最大平均运行时间
10+
let mut right: i64 = sum / n;
11+
// 用于记录满足条件的最大运行时间
12+
let mut ans: i64 = 0;
13+
14+
// 二分查找,寻找最大的可行运行时间
15+
while left <= right {
16+
let mid = (left + right) / 2; // 尝试的运行时间
17+
let mut total: i64 = 0;
18+
// 计算所有电池在最多每台电脑运行 mid 分钟时能提供的电量
19+
for (&cap) in &batteries {
20+
total += std::cmp::min(cap as i64, mid);
21+
}
22+
// 如果总电量可以支持 n 台电脑运行 mid 分钟
23+
if total >= n * mid {
24+
ans = mid; // 更新答案
25+
left = mid + 1; // 尝试更大的运行时间
26+
} else {
27+
right = mid - 1; // 尝试更小的运行时间
28+
}
29+
}
30+
ans // 返回最大运行时间
31+
}
32+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
long long maxRunTime(int n, vector<int>& batteries) {
4+
ranges::sort(batteries,greater<int>());
5+
long long sum = reduce(batteries.begin(),batteries.end(),0LL);
6+
for(int i =0; ;++i)
7+
{
8+
if(batteries[i] <= sum / n)
9+
{
10+
return sum / n;
11+
}
12+
sum -= batteries[i];
13+
--n;
14+
}
15+
}
16+
};
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// 采用对角矩阵的方法构造
2+
#include<bits/stdc++.h>
3+
#define il inline
4+
using namespace std;
5+
6+
#define pb push_back
7+
#define fastio \
8+
ios::sync_with_stdio(false); \
9+
cin.tie(0);
10+
11+
typedef long long ll;
12+
typedef unsigned long long ull;
13+
14+
const ll N = 5e5+5, mod = 1e9+7, inf = 2e18;
15+
const double eps = 1e-9;
16+
const double PI = 3.1415926;
17+
18+
il void solve(){
19+
int n,k;
20+
cin >> n >> k;
21+
for(int i = 0;i<n;++i)
22+
{
23+
for(int j = 0;j<n;++j)
24+
{
25+
if(i == j)
26+
{
27+
cout << k << ' ';
28+
}
29+
else
30+
{
31+
cout << 0 << ' ';
32+
}
33+
}
34+
cout << '\n';
35+
}
36+
}
37+
38+
int main()
39+
{
40+
fastio
41+
42+
int t = 1;
43+
// cin >> t;
44+
while(t--)
45+
{
46+
solve();
47+
}
48+
49+
return 0;
50+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"os"
7+
"strconv"
8+
)
9+
10+
var sc = bufio.NewScanner(os.Stdin)
11+
var out = bufio.NewWriter(os.Stdout)
12+
13+
func next() string {
14+
sc.Scan()
15+
return sc.Text()
16+
}
17+
18+
func nextInt() int {
19+
v, _ := strconv.Atoi(next())
20+
return v
21+
}
22+
23+
func main() {
24+
defer out.Flush()
25+
sc.Split(bufio.ScanWords)
26+
t := 1
27+
// t = nextInt()
28+
for ; t > 0; t-- {
29+
solve()
30+
}
31+
}
32+
33+
func solve() {
34+
n, s := nextInt(), nextInt()
35+
first_row := make([]int, n)
36+
q := s / n
37+
r := s % n
38+
39+
// 构造第一行
40+
for i := 0; i < n; i++ {
41+
if i < r {
42+
first_row[i] = q + 1
43+
} else {
44+
first_row[i] = q
45+
}
46+
}
47+
48+
// 构造并打印整个矩阵
49+
for i := 0; i < n; i++ {
50+
for j := 0; j < n; j++ {
51+
sep := " "
52+
if j == n-1 {
53+
sep = ""
54+
}
55+
fmt.Printf("%d%s", first_row[(j-i+n)%n], sep)
56+
}
57+
fmt.Println()
58+
}
59+
60+
}

0 commit comments

Comments
 (0)