每日算法&面试题,大厂特训二十八天——第二十三天(树)

176 阅读3分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

导读

在这里插入图片描述

肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!

算法特训二十八天

给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。

示例 1:

输入:low = 3, high = 7
输出:3
解释:37 之间奇数数字为 [3,5,7] 。
示例 2:

输入:low = 8, high = 10
输出:1
解释:810 之间奇数数字为 [9] 。

思路:如果我们暴力枚举 {\rm [low, high]}[low,high] 中的所有元素会超出时间限制。

我们可以使用前缀和思想来解决这个问题,定义 {\rm pre}(x)pre(x) 为区间 [0, x][0,x] 中奇数的个数,很显然:

{\rm pre}(x) = \lfloor \frac{x + 1}{2} \rfloor pre(x)=⌊ 2 x+1 ​ ⌋

故答案为 \rm pre(high) - pre(low - 1)pre(high)−pre(low−1)。

class Solution {
    public int countOdds(int low, int high) {
        return pre(high) - pre(low - 1);
    }

    public int pre(int x) {
        return (x + 1) >> 1;
    }
}


给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。

请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。

示例 1:

输入:salary = [4000,3000,1000,2000]
输出:2500.00000
解释:最低工资和最高工资分别是 10004000 。
去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500
示例 2:

输入:salary = [1000,2000,3000]
输出:2000.00000
解释:最低工资和最高工资分别是 10003000 。
去掉最低工资和最高工资以后的平均工资是 (2000)/1= 2000
示例 3:

输入:salary = [6000,5000,4000,3000,2000,1000]
输出:3500.00000
示例 4:

输入:salary = [8000,9000,2000,3000,6000,1000]
输出:4750.00000
class Solution {
    public double average(int[] salary) {
        double sum = 0;
        double maxValue = Integer.MIN_VALUE, minValue = Integer.MAX_VALUE;
        for (int num : salary) {
            sum += num;
            maxValue = Math.max(maxValue, num);
            minValue = Math.min(minValue, num);
        }
        return (sum - maxValue - minValue) / (salary.length - 2);
    }
}


面试题

线程池有哪几种创建方式?
Java 通过 Executors(jdk1.5 并发包)提供四种线程池,分别为:
 newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵
活回收空闲线程,若无可回收,则新建线程。
 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队
列中等待。
 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
 newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执
行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。


线程池参数有哪些?
 corePoolSize 核心线程大小。
 maximumPoolSize 线程池最大线程数量。
 keepAliveTime 空闲线程存活时间。
 unit 空间线程存活时间单位。
 workQueue 工作队列。
 threadFactory 线程工厂。
 handler