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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器镜像服务 ACR,镜像仓库100个 不限时长
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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
目录
相关文章
|
8天前
|
算法 网络协议 Linux
|
12天前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
29 3
|
7天前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
7天前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
1月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
44 3
|
1月前
|
负载均衡 算法 Java
【面试宝藏】Go语言运行时机制面试题
探索Go语言运行时,了解goroutine的轻量级并发及GMP模型,包括G(协程)、M(线程)和P(处理器)。GMP调度涉及Work Stealing和Hand Off机制,实现负载均衡。文章还讨论了从协作到基于信号的抢占式调度,以及GC的三色标记算法和写屏障技术。理解这些概念有助于优化Go程序性能。
35 4
|
11天前
|
JavaScript
JS【详解】setTimeout 延时(含清除 setTimeout,计时开始时间,0 秒延时解析,多 setTimeout 执行顺序,setTimeout 应用场景,网红面试题)
JS【详解】setTimeout 延时(含清除 setTimeout,计时开始时间,0 秒延时解析,多 setTimeout 执行顺序,setTimeout 应用场景,网红面试题)
32 0
|
1月前
|
存储 安全 Java
【面试宝藏】Go基础面试题其一
Go语言(Golang)结合C的性能和Python的易用性,具有简单语法、高效并发、自动垃圾回收等优点。它支持基本和派生数据类型,通过包进行代码管理。类型转换需显式进行,如将整数转为浮点数。Goroutine是轻量级线程,通过channel进行并发同步。Go接口可嵌套,同步锁用于控制并发访问。Channel提供类型安全的通信,注意避免死锁。Go Convey用于测试,`new`和`make`分别用于值类型和引用类型的初始化。了解这些,有助于更好地掌握Go语言。
21 2
|
1月前
|
存储 缓存 算法
【面试宝藏】Go并发编程面试题
探索Go语言并发编程,涉及Mutex、RWMutex、Cond、WaitGroup和原子操作。Mutex有正常和饥饿模式,允许可选自旋优化。RWMutex支持多个读取者并发,写入者独占。Cond提供goroutine间的同步,WaitGroup等待任务完成。原子操作保证多线程环境中的数据完整性,sync.Pool优化对象复用。了解这些,能提升并发性能。
24 2
|
14天前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点