![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
白首码农
这个作者很懒,什么都没留下…
展开
-
算法面试题之合并两个有序数组
面试题 两个有序的整型数组arr1,arr2,将arr2合并到arr1中,使arr1成为一个有序数组 解题思路 大体有三中思路: 1、合并之后再进行整体排序 2、通过双指针算法从前往后进行遍历两个数组,最后将剩余的数据复制到arr1 3、通过双指针算法从后往前进行遍历,无需将arr在初始数组暂存到额外的数组中,这是对方法2的改进。 示例代码 import java.util.Arrays; /* 合并两个有序数组 */ public class MergeOrderedArray.原创 2021-10-30 10:57:26 · 2075 阅读 · 0 评论 -
算法面试题之子数组最大平均数
面试题 给一个整数数组,找出平均数最大且长度为K在下标连续的子数组,并输出该最大平均数。 输入:[1,12,-5,-6,50,3],K=4 输出:12.75 最大平均数 (12-5-6+50)/4=12.75 实现思路 通过指针遍历,逐次取和并判断得到最大的子数组之和 示例代码 public class MaximumAverageNumOfSubArraysTest { public static void main(String[] args) { int[]原创 2021-10-30 09:38:43 · 138 阅读 · 0 评论 -
算法面试题之求根运算
求根运算主要有两种方法: 一种是二分法,这个是比较好理解的 一种是牛顿迭代法,这个有点晦涩,迭代的公式是这样的 其中 /** * 求根运算 */ public class CalRootTest { public static void main(String[] args) { System.out.println(byBinarySearch(81,2)); System.out.println(byNewtonIterator(.原创 2021-10-29 23:02:06 · 243 阅读 · 0 评论 -
算法面试题之斐波那契数列
斐波那契数列的求值,只要有三种方法: 暴力递归、去重递归、双指针迭代 /** * 斐波那契数列: 0,1,1,2,3,5,8,13,21,34,55 */ public class FibonacciSequenceTest { public static void main(String[] args) { System.out.println("暴力递归:" + byViolentRecursion(10)); System.out.println(原创 2021-10-29 19:35:02 · 73 阅读 · 0 评论 -
算法面试题之两数之和
从一个整型数组中查找两个数,这两个数之和需要等于指定的值 如果无序的话,可以通过双重遍历、Map暂存法来实现 如果是有序数组,还可通过 二分查找、双指针遍历法来实现 import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * 从一个整型数组中查找两个数,这两个数之和需要等于指定的值 * 如果无序的话,可以通过双重遍历、Map暂存法来实现 * 如果是有序数组,还可通过 二分查找、双指针...原创 2021-10-29 18:45:57 · 113 阅读 · 0 评论 -
算法面试题之获取整型数组中三个数最大的乘积
整体的思路: 如果全正、全负,最大值则为:最大的数*第二大的数*第三大的数 如果存在正负,最大值则为:最小在负数*第二小的负数*最大的正数 问题的关键是得到需要的这5个数 import java.util.Arrays; /** * 获取整型数组中三个数最大的乘积 * 整体的思路: * 如果全正、全负,最大值则为:最大的数*第二大的数*第三大的数 * 如果存在正负,最大值则为:最小在负数*第二小的负数*最大的正数 * 问题的关键是得到需要的这5个数 */ p...原创 2021-10-29 18:02:57 · 130 阅读 · 0 评论 -
算法面试题之寻找数组中心下标
问题的关键是怎么以最小的代价来计算左侧与右侧的数据之和。 关键的思想是:数组的总和 =左侧之和 +中心数值 +右侧之和。 随着向右遍历,左侧之和在递增,右侧之和在递减。 import java.util.Arrays; /** * 数找数组中心的下标位置,如果存在中心下标A,那么A左侧的数据之和要等于右侧数据之和 */ public class FindArrayCenterIndexTest { public static void main(String[] args) {...原创 2021-10-29 16:31:26 · 71 阅读 · 0 评论 -
算法面试题之有序数组排除重复的元素,并且返回数组的新长度
主要是采用双指针算法来剔除重复的元素 /** * 有序数组排除重复的元素,并且返回数组的新长度 */ public class OrderedArrayRemoveDuplicateDataTest { public static void main(String[] args) { int[] datas = {1,2,3,3,4,4,5,5,5}; System.out.println(removeDuplicateDatas(datas));原创 2021-10-29 16:10:07 · 115 阅读 · 0 评论 -
算法面试题之统计N以内素数的个数
主要有两种方法: 一种是按照素数的定义来逐个进行判断。 一种是通过埃筛法(素数的相关特性)对素数进行标识筛选。 /** * 统计N以内素数的个数 */ public class PrimeNumberStatTest { public static void main(String[] args) { System.out.println(byDefine(100)); System.out.println(byEthmoidalMethod(100)原创 2021-10-29 15:53:48 · 437 阅读 · 0 评论 -
算法面试题之单链表的反转
主要是采用两种方式: 一种是递归,一种是迭代 /** * 单链接表链接顺序反转 * */ public class LinkedListReverseTest { public static void main(String[] args) { LinkedListNode node = new LinkedListNode(1,2,3,4,5); System.out.println(node); // System.out.print原创 2021-10-29 15:19:43 · 58 阅读 · 0 评论 -
面试题:缓存穿透、缓存击穿、缓存雪崩
缓存穿透 概念 在缓存和数据库里均不存在对应的数据, 如果没做拦截的话,可能每次都会从数据库里查。 怎么解决 1、对数据要进行合法性检验,需要有一个白名单,如果不在白名单里,就直接返回。 2、如果这个缓存是全量的,那不在缓存里就直接返回,就不用再查数据表了。 3、每次查库之后即使是空结果也做个缓存,限定下过期时间,比如3分钟过期,这样也会减少一些压力。 4、这类请求不排除人为伪造的可能,如果请求量大的话,可以在服务器里设置黑名单。 缓存击穿 概念 某个key对应的数据访问量极大,而在缓存原创 2021-09-13 14:26:47 · 115 阅读 · 0 评论