挑战春招找到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的热情继续努力。

八股文来自:面试鸭

相关推荐
你怎么知道我是队长1 小时前
C语言---缓冲区
c语言·开发语言
一勺菠萝丶1 小时前
PDF24 转图片出现“中间横线”的根本原因与终极解决方案(DPI 原理详解)
java
姓蔡小朋友1 小时前
Unsafe类
java
一只专注api接口开发的技术猿1 小时前
如何处理淘宝 API 的请求限流与数据缓存策略
java·大数据·开发语言·数据库·spring
superman超哥1 小时前
Rust 异步递归的解决方案
开发语言·后端·rust·编程语言·rust异步递归
荒诞硬汉1 小时前
对象数组.
java·数据结构
期待のcode1 小时前
Java虚拟机的非堆内存
java·开发语言·jvm
黎雁·泠崖1 小时前
Java入门篇之吃透基础语法(二):变量全解析(进制+数据类型+键盘录入)
java·开发语言·intellij-idea·intellij idea
仙俊红1 小时前
LeetCode484周赛T4
java