挑战春招找到java后端实习第一天(1.1)

八股文

1.java中有哪些集合类请简单介绍一下

集合类分为两大类Collection和Map。前者是对象的集合,后者是键值对。

Collection分为List,Set,Queue三个接口。

List有LinkedList,ArrayList,Vector

Set(不允许重复)有HashSet,TreeSet(元素有序),LinkedHashSet(维护插入顺序)

Queue有LinkedList,PriorityQueue。

Map有HashMap,LinkedHashMap,TreeMap(键值有序),HashTable,ConcurrentHashMap(后两个都不允许键值为null) 实现类。

接口和抽象类有什么区别

接口是like a,抽象类是is a

Java 抽象类和接口的区别,看这一篇就够了,全面解析 | 二哥的Java进阶之路

算法

740. 删除并获得点数

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

示例 1:

复制代码
输入:nums = [3,4,2]
输出:6
解释:
删除 4 获得 4 个点数,因此 3 也被删除。
之后,删除 2 获得 2 个点数。总共获得 6 个点数。

示例 2:

复制代码
输入:nums = [2,2,3,3,3,4]
输出:9
解释:
删除 3 获得 3 个点数,接着要删除两个 2 和 4 。
之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。
总共获得 9 个点数。

提示:

  • 1 <= nums.length <= 2 * 104
  • 1 <= nums[i] <= 104

思路:这题看似有两个约束,但是如果把数组排序之后那就只用考虑前一个了,因为与打家劫舍的原理一致,如果前一个选中了那么后一个会给删掉,以此类推可以发现所有的都是按照规则去排,转化为顺序dp。

cnt记录每个元素出现几次,f\[\]1表示选择该元素的最大值,f\[\]0表示不选该元素的最大值

java 复制代码
class Solution {
    public int deleteAndEarn(int[] nums) {
        int cnt[]=new int[10001];
        int max=-1;
        for(int i:nums){
            cnt[i]++;
            max=Math.max(max,i);
        }
        int f[][]=new int[max+1][2];
        for(int i=1;i<=max;i++){
            f[i][1]=f[i-1][0]+cnt[i]*i;
            f[i][0]=Math.max(f[i-1][1],f[i-1][0]);
        }
        return Math.max(f[max][0],f[max][1]);
    }
}

开心的事:跑完人生第一个五公里

不开心:暂时没有

思考:不能太晚睡觉,保持规律的作息,多去看望外婆。每天滚动复习前一天的知识点,明天开始做项目。新一年,新的开始,保持Day1的热情继续努力。

八股文来自:面试鸭

相关推荐
星空椰3 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
橙淮3 小时前
并发编程(六)
java·jvm
拽着尾巴的鱼儿3 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影3 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特3 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
雪度娃娃3 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
EntyIU4 小时前
JVM内存与GC笔记
java·jvm·笔记
XS0301064 小时前
并发编程 六
java·后端
yaoxin5211234 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道4 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试