外观
海康威视
约 764 字大约 3 分钟
2025-02-27
海康威视
2个小时:25道单选+10道多选+2道编程
第一道:字符串去重
编写一个方法,对只有小写字母的字符串进行去重,并保持字母在字符串中首次出现的顺序。 输入描述 输入一串带重复字符的字符串,输出第一次出现的字符的字符串
输出描述 对只有小写字母的字符串进行去重并输出
样例输入 hikvision
样例输出 hikvson
代码
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
// 创建一个扫描器对象获取输入
Scanner scanner = new Scanner(System.in);
// 获取输入的字符串
String input = scanner.nextLine();
// 调用去重方法并打印输出
System.out.println(removeDuplicates(input));
// 关闭扫描器
scanner.close();
}
// 去除字符串中的重复字符并保持首次出现顺序
public static String removeDuplicates(String input) {
// 创建一个有序的Set来存储字符,LinkedHashSet保持插入顺序
Set<Character> charSet = new LinkedHashSet<>();
// 遍历输入字符串,将每个字符放入set中
for (char ch : input.toCharArray()) {
charSet.add(ch);
}
// 将Set中的字符拼接为字符串
StringBuilder result = new StringBuilder();
for (char ch : charSet) {
result.append(ch);
}
return result.toString();
}
}
代码说明
- 使用
LinkedHashSet
保证字符按照插入顺序存储,同时自动去重。 - 遍历输入字符串,将每个字符插入
LinkedHashSet
,如果字符已经存在,Set
会自动处理重复字符。 - 最后将
Set
中的字符拼接成字符串并返回
第二题 SQL 查找
题目描述
数据库-每个用户每周的活跃天数
有如下表 user_login
date user_id time
20230101 1 2023-01-01 09:01:00
20230101 1 2023-01-01 11:02:00
20230101 2 2023-01-02 10:08:00
20230102 2 2023-01-02 15:05:00
求每个用户每周的活跃天数
输入描述 建表及插入数据
输出描述 查询结果,userid、第几周、活跃天数
示例: 样例输入 CREATE TABLE user_login(date DATE,user_id int ,time DATETIME);
insert into user_login value('20230101',1,'2023-01-01 09:01:00');
insert into user_login value('20230101',1,'2023-01-01 11:02:00');
insert into user_login value('20230102',2,'2023-01-02 10:08:00');
insert into user_login value('20230102',3,'2023-01-02 15:05:00');
样例输出
1 | 202301 | 1 |
2 | 202301 | 1 |
3 | 202301 | 1 |
代码
SELECT
user_id,
YEAR(date)*100 + FLOOR((DAYOFYEAR(date)-1)/7)+1 AS week_number,
COUNT(DISTINCT date) AS active_days
FROM
user_login
GROUP BY
user_id, week_number;
代码解释
计算周编号:
YEAR(date)*100
:获取日期的年份并乘以 100,以便为周编号预留两位数的位置。FLOOR((DAYOFYEAR(date)-1)/7)+1
:计算日期在一年中的第几周。DAYOFYEAR(date)
获取日期在一年中的第几天,减 1 后除以 7,取整,再加 1 得到周编号。- 组合起来,
YEAR(date)*100 + FLOOR((DAYOFYEAR(date)-1)/7)+1
得到类似202301
的周编号。
计算活跃天数:
COUNT(DISTINCT date)
:统计每个用户在该周内登录的不同日期数量。
分组:
GROUP BY user_id, week_number
:按照用户和周编号分组,计算每个用户每周的活跃天数。