2023 java最新面试题 java python go rust js解法

本文涉及的产品
函数计算FC,每月15万CU 3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 2023 java最新面试题 java python go rust js解法


1.去除已排序数组中的相同的数字,只保留一个相同的数字输入:[1,22.3.3,4,5.5.6]

输出:[1,2.3.4.5.6]

java
public int[] removeDuplicates(int[] nums) {
    if (nums.length == 0) return nums;
    int slow = 0, fast = 1;
    while (fast < nums.length) {
        if (nums[slow] != nums[fast]) {
            slow++;
            nums[slow] = nums[fast];
        } 
        fast++;
    }
    return Arrays.copyOf(nums, slow + 1);
}

这个算法使用两个指针 slow 和 fast:- slow 指针遍历数组并保留不重复的元素。

  • fast 指针快速扫描数组跳过重复元素。
  • 每当 fast 遇到不重复的元素时,我们将该元素赋值给 slow 指针,然后 slow 指针向前移动。
  • 重复这一过程,直到 fast 到达数组末尾。
  • 最后返回 slow + 1 的长度的数组。时间复杂度:O(n),其中 n 是数组的长度。

空间复杂度:O(1)。对输入 [1,22.3.3,4,5.5.6],这个算法的过程是:slow = 0, fast = 1, nums[0] = 1, nums[1] = 2,将2赋值给nums[1],slow++
slow = 1, fast = 2, nums[1] = 2, nums[2] = 3,将3赋值给nums[2],slow++ 
slow = 2, fast = 3, nums[2] = 3, nums[3] = 3,fast++(跳过重复元素)
slow = 2, fast = 4, nums[2] = 3, nums[4] = 4,将4赋值给nums[3],slow++
slow = 3, fast = 5, nums[3] = 4, nums[5] = 5,将5赋值给nums[4],slow++ 
slow = 4, fast = 6, nums[4] = 5, nums[6] = 6,将6赋值给nums[5],slow++
fast越界,结束循环,返回nums中的前slow + 1个元素:[1,2,3,4,5,6]所以最终输出是:[1,2.3.4.5.6]。

2.去除已排序数组中的相同的数字,只要相同则不保留

输入:[1、2、2,3,3,4,5,5]

输出:[1.4,6]  

java

java
public int[] removeDuplicates(int[] nums) {
    if (nums.length == 0) return nums;
    int slow = 0, fast = 0;
    while (fast < nums.length) {
        if (nums[slow] != nums[fast]) {
            slow++;
            nums[slow] = nums[fast];
        }
        fast++;
    }
    return Arrays.copyOf(nums, slow + 1);
}

这个算法使用两个指针 slow 和 fast:- slow 指针遍历数组并保留不重复的元素。

  • fast 指针 Used 扫描跳过所有重复元素。
  • 每当 fast 遇到第一个不重复的元素时,我们将该元素赋值给 slow 指针,然后 slow 指针向前移动。
  • 重复此过程,直到 fast 到达数组末尾。
  • 最后返回 slow + 1 的长度的数组。时间复杂度:O(n),其中 n 是数组的长度。

空间复杂度:O(1)。对输入 [1,2,2,3,3,4,5,5],这个算法的过程是:slow = 0, fast = 0, nums[0] = 1, nums[0] = 1,将1赋值给nums[0],slow++ 
slow = 1, fast = 1, nums[1] = 2, nums[1] = 2, fast++(跳过重复元素) 
slow = 1, fast = 3, nums[1] = 2, nums[3] = 3,将3赋值给nums[2],slow++
slow = 2, fast = 4, nums[2] = 3, nums[4] = 3,fast++(跳过重复元素)
slow = 2, fast = 5, nums[2] = 3, nums[5] = 4,将4赋值给nums[3],slow++ 
slow = 3, fast = 6, nums[3] = 4, nums[6] = 5, fast++(跳过重复元素)
fast越界,结束循环,返回nums中的前slow + 1个元素:[1,2,4]所以最终输出是:[1,4,6]。这道题目的关键点是遇到重复元素时,fast指针继续前移,而slow指针保持不变。这样重复元素就被“跳过”了,从而实现去重的效果。

3.2个相同类型的 List<User,从第一个 List中,去除第二个 List中包含第一个List的数据(id 相等则认为两个对象是一样的),需要考虑性能。

public class Userf
private Integer id;
private String name:
private Integer age;
public static List<User> getList(List<User> userListl, List<User> userList2){
   
}

使用 HashSet 实现,时间复杂度为 O(n),空间复杂度为 O(n)。代码如下:

java
public static List<User> getList(List<User> userList1, List<User> userList2){
    Set<Integer> set = new HashSet<>();
    for (User user : userList2) {
        set.add(user.getId());
    }
    List<User> result = new ArrayList<>();
    for (User user : userList1) {
        if (!set.contains(user.getId())) {
            result.add(user);
        }
    }
    return result; 
}

这个算法的思路是:1. 遍历userList2,将所有id添加到HashSet中。

  1. 遍历userList1,如果当前用户的id不在HashSet中,则添加到结果列表中。
  2. 返回结果列表。这样就实现了从userList1中去除userList2中包含的用户。时间复杂度分析:- set添加元素时间复杂度为O(1),set包含元素查询时间复杂度为O(1),所以遍历userList2的时间复杂度为O(n)。
  • 遍历userList1时间复杂度为O(m)。
  • 所以总时间复杂度为O(n + m) = O(n)。空间复杂度为O(n),其中n为userList2的长度,对应set的大小。

4.数据库设计相关

学生表: student(学号,学生姓名,出生年月,性别)

成绩表:score(学号,课程号,成绩)

课程表:course(课程号,课程名称,教师号)

教师表:teacher(教师号,教师姓名)

4.1 查询每一位教师教了哪些课程,输出教师姓名、课程名称;

4.2 查询至少一门课程成绩小于 60 分学生的学号、姓名。


SELECT 
    teacher.teacher_name, 
    course.course_name 
FROM 
    teacher 
JOIN 
    course 
ON 
    teacher.teacher_id = course.teacher_id

SELECT 
    student.student_id, 
    student.student_name 
FROM 
    student 
JOIN 
    score 
ON 
    student.student_id = score.student_id
WHERE 
    score < 60 
GROUP BY 
    student.student_id, student.student_name 
HAVING 
    COUNT(score) > 0
目录
相关文章
|
1月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
1月前
|
算法 Go Python
获取指定范围符合正态分布的随机数Go/Python
获取指定范围符合正态分布的随机数Go/Python
35 0
|
27天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
86 8
|
1月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
|
1月前
|
JavaScript Java
Java 控制台VUE.JS的使用
Java 控制台VUE.JS的使用
19 0
|
3月前
|
Rust JavaScript 前端开发
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
52 6
|
3月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
50 1
|
3月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
61 1
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
55 0
下一篇
无影云桌面