虾皮一面面经

  1. 线程和进程的区别
  2. TCP和UDP的区别, TCP如何定义一个连接
  3. 数组和链表的区别以及选择
  4. 双亲委派模型,什么时候我们需要打破双亲委派模型,以及怎么样去做
  5. 一亿数据里去找Top 100 数据 (包括二叉堆如何进行下沉操作)
  6. 实现一个 [pop push getMax(得到当前栈中最大值)] O(1) 时间复杂度 的栈结构双栈,双栈的具体内部push pop细节
  7. 判断一个单链表是否有环, 如何计算环的大小(给了我快指针走了2b ,慢指针走了b。我给出答案b。实际计算不出来,被坑了,给了个大概思路,忘记快指针不只走一圈了。 但是可以通过找到环的起点之后遍历得到。出自楼下兄弟的提醒)
  8. 算法题输入一个只包含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##秋招#
全部评论
计算环的大小 这个找到环的入口后,重新让快指针环内走一圈直至和慢指针重合,遍历时计数不就好了吗
1 回复 分享
发布于 09-23 11:13 江苏
还有线程和进程的区别,以及双亲委派机制
点赞 回复 分享
发布于 09-23 16:50 甘肃

相关推荐

09-29 16:40
门头沟学院 Java
点赞 评论 收藏
分享
评论
4
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务