6261. 数组中字符串的最大值

一个由字母和数字组成的字符串的 定义如下:

  • 如果字符串 包含数字,那么值为该字符串在 10 进制下的所表示的数字。
  • 否则,值为字符串的 长度

给你一个字符串数组 strs ,每个字符串都只由字母和数字组成,请你返回 strs 中字符串的 最大值

示例 1:

1
2
3
4
5
6
7
8
9
输入:strs = ["alic3","bob","3","4","00000"]
输出:5
解释:
- "alic3" 包含字母和数字,所以值为长度 5 。
- "bob" 只包含字母,所以值为长度 3 。
- "3" 只包含数字,所以值为 3 。
- "4" 只包含数字,所以值为 4 。
- "00000" 只包含数字,所以值为 0 。
所以最大的值为 5 ,是字符串 "alic3" 的值。

示例 2:

1
2
3
4
输入:strs = ["1","01","001","0001"]
输出:1
解释:
数组中所有字符串的值都是 1 ,所以我们返回 1 。

提示:

  • 1 <= strs.length <= 100
  • 1 <= strs[i].length <= 9
  • strs[i] 只包含小写英文字母和数字。

解法:按照题意模拟即可

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def maximumValue(self, a: List[str]) -> int:
res = 0
for x in a:
now = 0
for y in x:
if y.isalpha():
now = len(x)
break
if now == 0:
now = int(x)
res = max(res, now)
return res

6262. 图中最大星和

给你一个 n 个点的无向图,节点从 0n - 1 编号。给你一个长度为 n 下标从 0 开始的整数数组 vals ,其中 vals[i] 表示第 i 个节点的值。

同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 aibi 之间有一条双向边。

星图 是给定图中的一个子图,它包含一个中心节点和 0 个或更多个邻居。换言之,星图是给定图中一个边的子集,且这些边都有一个公共节点。

下图分别展示了有 3 个和 4 个邻居的星图,蓝色节点为中心节点。

img

星和 定义为星图中所有节点值的和。

给你一个整数 k ,请你返回 至多 包含 k 条边的星图中的 最大星和

示例 1:

img

1
2
3
4
5
输入:vals = [1,2,3,4,10,-10,-20], edges = [[0,1],[1,2],[1,3],[3,4],[3,5],[3,6]], k = 2
输出:16
解释:上图展示了输入示例。
最大星和对应的星图在上图中用蓝色标出。中心节点是 3 ,星图中还包含邻居 1 和 4 。
无法得到一个和大于 16 且边数不超过 2 的星图。

示例 2:

1
2
3
4
输入:vals = [-5], edges = [], k = 0
输出:-5
解释:只有一个星图,就是节点 0 自己。
所以我们返回 -5 。

提示:

  • n == vals.length
  • 1 <= n <= 105
  • -104 <= vals[i] <= 104
  • 0 <= edges.length <= min(n * (n - 1) / 2``, 105)
  • edges[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • 0 <= k <= n - 1

解法:贪心,每次枚举一个节点的前k个最大得分的邻居节点即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
def maxStarSum(self, a: List[int], b: List[List[int]], k: int) -> int:
n = len(a)
es = []
for i in range(n):
es.append([])
for e in b:
st, ed = e[0], e[1]
es[st].append(ed)
es[ed].append(st)
for i in range(n):
es[i].sort(key=lambda x:-a[x])
print(es)

res = -9999999999999999
for i in range(n):
now = a[i]
cnt = 0
for to in es[i]:
if cnt + 1 <= k and a[to] >= 0:
cnt += 1
now += a[to]
res = max(res, now)
return res

6263. 青蛙过河 II

给你一个下标从 0 开始的整数数组 stones ,数组中的元素 严格递增 ,表示一条河中石头的位置。

一只青蛙一开始在第一块石头上,它想到达最后一块石头,然后回到第一块石头。同时每块石头 至多 到达 一次。

一次跳跃的 长度 是青蛙跳跃前和跳跃后所在两块石头之间的距离。

  • 更正式的,如果青蛙从 stones[i] 跳到 stones[j] ,跳跃的长度为 |stones[i] - stones[j]|

一条路径的 代价 是这条路径里的 最大跳跃长度

请你返回这只青蛙的 最小代价

示例 1:

img

1
2
3
4
5
输入:stones = [0,2,5,6,7]
输出:5
解释:上图展示了一条最优路径。
这条路径的代价是 5 ,是这条路径中的最大跳跃长度。
无法得到一条代价小于 5 的路径,我们返回 5 。

示例 2:

img

1
2
3
4
5
6
输入:stones = [0,3,9]
输出:9
解释:
青蛙可以直接跳到最后一块石头,然后跳回第一块石头。
在这条路径中,每次跳跃长度都是 9 。所以路径代价是 max(9, 9) = 9 。
这是可行路径中的最小代价。

提示:

  • 2 <= stones.length <= 105
  • 0 <= stones[i] <= 109
  • stones[0] == 0
  • stones 中的元素严格递增。

解法:考虑任意三个石头,由于不能重复跳同一个石头,所以一次跨越一个和跳过一个是等价的,枚举间隔一个区间即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define edl endl
#define hsset unordered_set
#define hsmap unordered_map
#define pq piority_queue
#define mp make_pair
#define fi first
#define se second
#define MAX *max_element
#define VI vector<int>
#define DVI vector< vector<int> >
#define PII pair<int, int>
#define PLL pair<long, long>
#define mst(a,b) memset(a, b, sizeof(a))
#define add(x) push_back(x)
#define size(x) (int) x.size()
#define str(x) to_string(x)
#define all(x) x.begin(), x.end()
#define ls(x) x<<1
#define rs(x) x<<1|1
#define L(i, a, b) for (int i = (a); i < (b); i++)
#define R(i, a, b) for (int i = (a); i >= (b); i--)
#define OUT(x) for (auto p : x) cout << p << " ";

ll qpow(ll a, ll b, ll c) {ll res = 1;a%=c;for(;b;a=a*a%c,b>>=1)if(b&1)res=res*a%c;return res;}
ll gcd (ll a,ll b) {return b?gcd(b,a%b):a;}
void Yes(bool f) {if (f) cout << "Yes" << endl;else cout << "No" << endl;}
void YES(bool f) {if (f) cout << "YES" << endl;else cout << "NO" << endl;}

const ll INF = 9999999999999999L;
const int MOD = int(1e9 + 7);
const int N = int(2e9);
// head

class Solution {
public:
int maxJump(vector<int>& a) {
int n = size(a);
if (n <= 3) return a[n - 1];

int res = 0;
for (int i = 0; i + 2 < n; i++) {
res = max(res, a[i + 2] - a[i]);
}
return res;
}
};