虾皮一面面经
- 线程和进程的区别
- TCP和UDP的区别, TCP如何定义一个连接
- 数组和链表的区别以及选择
- 双亲委派模型,什么时候我们需要打破双亲委派模型,以及怎么样去做
- 一亿数据里去找Top 100 数据 (包括二叉堆如何进行下沉操作)
- 实现一个 [pop push getMax(得到当前栈中最大值)] O(1) 时间复杂度 的栈结构双栈,双栈的具体内部push pop细节
- 判断一个单链表是否有环, 如何计算环的大小(给了我快指针走了2b ,慢指针走了b。我给出答案b。实际计算不出来,被坑了,给了个大概思路,忘记快指针不只走一圈了。 但是可以通过找到环的起点之后遍历得到。出自楼下兄弟的提醒)
- 算法题输入一个只包含xyz的一个字符串,输出满足x,y,z都至少出现过一次的子字符串的数量。滑动窗口解决。
import java.util.Scanner; /** * 输入一个只包含xyz的一个字符串,输出满足x,y,z都至少出现过一次的子字符串的数量。 * * 示例: * * 输入:str = “xxxyz” * * 输出:3 * * 解释:分别为“xxxyz”,“xxyz”,“xyz” */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); int[] window = new int[3]; // x, y, z int valid = 0; // valid == 3 int n = s.length(); int l = 0, r = 0; int res = 0; while (r < n) { char c = s.charAt(r); r++; if (c == 'x' || c == 'y' || c == 'z') { int index = c - 'x'; window[index]++; if (window[index] == 1) { valid++; } } while (valid == 3) { int count = n - r + 1; res += count; char d = s.charAt(l); l++; if (d == 'x' || d == 'y' || d == 'z') { int index = d - 'x'; if (window[index] == 1) { valid--; } window[index]--; } } } System.out.println(res); } }
9.总结: 没有针对项目进行提问,主要拷打算法,常见算法的具体实现还需要再巩固。
#虾皮##秋招java##秋招#