【双指针】面试题 17.11. 单词距离

本文探讨如何通过双指针优化算法解决大文本文件中任意两个单词之间的最短距离问题,减少重复搜索,并在给定空间限制下提高效率。实现细节包括利用word列表存储位置、对比指针移动以找到最小距离。

面试题 17.11. 单词距离

有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?

示例:

输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1

提示:

words.length <= 100000

题解:

  1. 先用list保存两个单词在words中出现的位置
  2. 使用双指针,计算两个单词位置的最小距离
class Solution {
    public int findClosest(String[] words, String word1, String word2) {
        // 记录word1 和 word2 在 words中出现的位置
        List<Integer> wps1 = new ArrayList<>();
        List<Integer> wps2 = new ArrayList<>();
        for (int i=0;i<words.length;++i) {
            if (words[i].equals(word1)) {
                wps1.add(i);
            }
            if (words[i].equals(word2)) {
                wps2.add(i);
            }
        }
        int p = 0;
        int q = 0;
        int minLen = Integer.MAX_VALUE;
        // 使用双指针,对比两个word在words中出现的位置
        while (p<wps1.size() && q<wps2.size()) {
            int inxP = wps1.get(p);
            int inxQ = wps2.get(q);
            if (inxP > inxQ) {
                if (minLen > inxP-inxQ) {
                    minLen = inxP-inxQ;
                }
                q++;
            } else {
                if (minLen > inxQ-inxP) {
                    minLen = inxQ-inxP;
                }
                p++;
            }
        }
        return minLen;
    }
}
### GitLab CE 17.11.6 Pages 功能兼容性问题解决方案 在 GitLab CE 17.11.6 中启用和运行 GitLab Pages 功能时,可能会遇到与配置、服务依赖或版本更新相关的兼容性问题。这些问题通常涉及 Pages 服务未正确启用、证书配置失败、访问路径错误或 CI/CD 流水线无法正常触发等。以下是针对这些问题的系统性解决方案。 #### 配置 Pages 服务并确保其兼容性 GitLab Pages 自 GitLab 8.17 版本起已支持社区版,但为了确保在 17.11.6 版本中稳定运行,需在 GitLab 配置文件中启用并正确设置 Pages 服务。编辑 `/etc/gitlab/gitlab.rb` 文件,添加以下配置: ```ruby pages_external_url 'http://your-pages-domain.com' gitlab_pages['enable'] = true gitlab_pages['host'] = 'your-pages-domain.com' gitlab_pages['port'] = 80 gitlab_pages['https'] = false ``` 此配置确保 Pages 服务被正确启用,并绑定到指定的域名和端口。若需启用 HTTPS,可将 `https` 设置为 `true` 并配置 SSL 证书路径。配置完成后,执行 `gitlab-ctl reconfigure` 命令以应用更改。 #### 启用自动 HTTPS 证书管理 从 GitLab 12.1 开始,Pages 支持通过 Let's Encrypt 自动生成和续订 HTTPS 证书。在 GitLab 17.11.6 中,可通过以下方式启用该功能: ```ruby gitlab_pages['cert'] = "/etc/gitlab/ssl/fullchain.pem" gitlab_pages['cert_key'] = "/etc/gitlab/ssl/privkey.pem" gitlab_pages['external_http'] = 'your-pages-domain.com:80' gitlab_pages['external_https'] = 'your-pages-domain.com:443' ``` 同时,在 GitLab 管理界面中启用“Automatic certificate management using Let's Encrypt”选项,使 GitLab 自动处理证书的申请和续订过程,确保 Pages 站点在自定义域名下安全运行[^2]。 #### 优化 CI/CD 构建流程以提升兼容性 GitLab Pages 的构建依赖于 `.gitlab-ci.yml` 文件中的 `pages` job。为了确保构建流程在 GitLab CE 17.11.6 中顺利执行,应避免使用过时的构建镜像或不兼容的脚本。以下是一个兼容性良好的 CI/CD 配置示例: ```yaml image: node:latest build: script: - npm install - npm run build artifacts: paths: - public/ pages: script: - cp -r dist public/ artifacts: paths: - public/ only: - main ``` 此配置使用 `node:latest` 镜像进行构建,确保依赖版本与当前 GitLab 版本兼容,并将构建结果输出至 `public/` 目录供 Pages 服务托管。 #### 排查常见兼容性问题 若 Pages 服务未正常运行,可通过以下方式排查问题: - 检查 `/var/log/gitlab/gitlab-pages/` 中的日志文件,查看是否有配置错误或启动失败信息。 - 确保 GitLab Runner 已注册并具备执行 `pages` job 的能力。 - 验证 `.gitlab-ci.yml` 中的 `artifacts` 路径是否正确指向构建输出目录。 - 若使用自定义域名,确认 DNS CNAME 记录是否正确指向 GitLab Pages 域名。 - 检查 `/etc/gitlab/gitlab.rb` 中的 Pages 配置是否与当前部署环境一致。 #### 提升 Pages 站点的可访问性与性能 为提升 Pages 站点的访问速度和稳定性,可配置反向代理或 CDN 加速服务。例如,使用 Nginx 作为反向代理: ```nginx server { listen 80; server_name your-pages-domain.com; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 此配置将请求转发至 GitLab Pages 服务的默认端口 `8090`,并可通过缓存、压缩等优化手段进一步提升性能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值