海康威视
海康威视¶
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
:按照用户和周编号分组,计算每个用户每周的活跃天数。