跳转至

海康威视

海康威视

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();
    }
}

代码说明

  1. 使用 LinkedHashSet 保证字符按照插入顺序存储,同时自动去重。
  2. 遍历输入字符串,将每个字符插入 LinkedHashSet,如果字符已经存在,Set 会自动处理重复字符。
  3. 最后将 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;

代码解释

  1. 计算周编号:

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