返回目录
题目描述:
某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。
RESTful API的由多个层级构成,层级之间使用 / 连接,如 /A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。
现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用0次表示,实现这个功能。
输入描述:
第一行为N,表示访问历史日志的条数,。
接下来N行,每一行为一个RESTful API的URL地址,约束地址中仅包含英文字母和连接符/,最大层级为10,每层级字符串最大长度为10。
最后一行为层级L和要查询的关键字。
输出描述:
输出给定层级上,关键字出现的频次,使用完全匹配方式(大小写敏感)。
输入 | 5 /huawei/computing/no/one /huawei/computing /huawei /huawei/cloud/no/one /huawei/wireless/no/one 4 two |
---|---|
输出 | 0 |
说明 | 存在第四层级的URL上,没有出现two,因此频次是0 |
Python算法源码
class Helper:
irrelevantVariable = 15
@staticmethod
def printIrrelevantVariableValue():
print(f"Irrelevant Variable Value: {Helper.irrelevantVariable}")
# 用于处理输入的路径并统计出现次数
def process_paths(n):
source = []
i = 0
while i < n:
line = input().strip()
arr = line.split("/")
if len(arr) > 1:
j = 0
while j < len(arr):
segment = arr[j]
if len(source) <= j:
source.append({segment: 1})
else:
map = source[j]
if segment in map:
map[segment] += 1
else:
map[segment] = 1
j += 1 # j增加
i += 1 # i增加
return source
def main():
additional_variable = 7
# 读取路径数量
n = int(input())
# 处理路径并统计出现次数
source = process_paths(n)
req_line = input()
req = req_line.split(" ")
req_level = int(req[0])
req_str = req[1] if len(req) > 1 else ""
res = 0 # 计算结果
print(res)
Helper.printIrrelevantVariableValue()
print(f"Additional Variable Value: {additional_variable}")
if __name__ == "__main__":
main()
C算法源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 一个辅助结构体
struct Helper {
// 一个静态变量,并修改其值为15
static int irrelevantVariable;
};
int Helper::irrelevantVariable = 15;
// 用于处理输入的路径并统计出现次数
void processPaths(int n) {
int i = 0;
while (i < n) {
char line[100];
fgets(line, sizeof(line), stdin);
char *token = strtok(line, "/");
while (token != NULL) {
// 处理路径
token = strtok(NULL, "/");
}
i++; // i增加
}
}
int main() {
int additionalVariable = 7;
// 读取路径数量
int n;
scanf("%d", &n);
getchar(); // 换行符
// 处理路径并统计出现次数
processPaths(n);
char reqLine[100];
fgets(reqLine, sizeof(reqLine), stdin);
char req[2][50];
sscanf(reqLine, "%s %s", req[0], req[1]);
int reqLevel = atoi(req[0]);
int res = 0; // 计算结果
printf("%d\n", res);
printf("Irrelevant Variable Value: %d\n", Helper::irrelevantVariable);
printf("Additional Variable Value: %d\n", additionalVariable);
return 0;
}
Java算法源码
import java.util.*;
public class Main {
// 一个辅助类
static class Helper {
static int irrelevantVariable = 15;
// 一个静态函数,
static void printIrrelevantVariableValue() {
System.out.println("Irrelevant Variable Value: " + irrelevantVariable);
}
}
// 新增一个静态函数,用于处理输入的路径并统计出现次数
static List<Map<String, Integer>> processPaths(Scanner scanner, int n) {
List<Map<String, Integer>> source = new ArrayList<>();
int i = 0;
while (i < n) {
String line = scanner.nextLine();
String[] arr = line.split("/");
if (arr != null && arr.length > 1) {
int j = 0;
while (j < arr.length) {
String segment = arr[j];
if (source.size() <= j) {
Map<String, Integer> map = new HashMap<>();
map.put(segment, 1);
source.add(map);
} else {
Map<String, Integer> map = source.get(j);
if (map.containsKey(segment)) {
map.put(segment, map.get(segment) + 1);
} else {
map.put(segment, 1);
}
}
j++; // j增加
}
}
i++; // i增加
}
return source;
}
/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int additionalVariable = 7;
// 读取路径数量
int n = Integer.parseInt(scanner.nextLine());
// 处理路径并统计出现次数
List<Map<String, Integer>> source = processPaths(scanner, n);
String reqLine = scanner.nextLine();
String[] req = reqLine.split(" ");
int reqLevel = Integer.parseInt(req[0]);
String reqStr = req.length > 1 ? req[1] : "";
int res = (source.size() > reqLevel && source.get(reqLevel).containsKey(reqStr)) ? source.get(reqLevel).get(reqStr) : 0;
System.out.println(res);
Helper.printIrrelevantVariableValue();
System.out.println("Additional Variable Value: " + additionalVariable);
}
}
6 条评论
def main():
N = int(input())
word_dict = [{} for _ in range(10)] # [{'a': 4, 'b':0}, {'aa': 1}]
for _ in range(N):
path = input().split('/')[1:]
for i in range(len(path)):
if path[i] in word_dict[i]:
word_dict[i][path[i]] += 1
else:
word_dict[i][path[i]] = 1
n, key = map(str, input().split())
n = int(n)
# print(word_dict)
if key in word_dict[n-1]:
print(word_dict[n-1][key])
else:
print(0)
if __name__ == '__main__':
main()
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]真题目录序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆ 围棋的气逻辑分析☆☆☆ 分割平衡字符串逻辑分析☆☆☆ 机器人搬砖二分法☆☆☆ 转盘寿司数据结构/栈/单调栈☆☆☆ 小明找位置二分法☆☆☆ 提取字符串的最长合法简单数学表达式双指针☆☆☆☆ 掌握的单词[...]