因为太久没offer,家里人给我做法事了。。。

文摘   2024-11-14 10:23   山西  

不得不说,这年头大家为找工作真的是无所不用其极啊。这不,居然有网友因为“0 offer太久”,家里人看不下去了,直接上法事了!

可能他家里人想的是,既然履历不行,那就来点玄学助攻,毕竟传统智慧总有些道理嘛!不过网友们一看帖子,就被整笑喷了,纷纷要求加入,甚至有人要点自己的名,让法事的功效也波及一下自己。

但是说白了,“offer”这种东西,不只是技术堆积,还真的需要一点点运气——就像我们代码调试,有时候也会求求“代码之神”保佑自己别出bug!

找工作的时候,不管你信不信玄学,大家只要坚持努力、不断迭代,总会有属于自己的那份“offer”到来的!希望法事也好,祈祷也罢,最后都能让我们这些0 offer的兄弟们,早点拿到心仪的工作。

今日面试题


今天来聊聊一个常见的面试题:文本左右对齐(Text Justification)。有些小伙伴可能在面试中碰到过这个问题,或者在自己的编程中也有过类似的需求——如何将一段文本根据特定的规则进行对齐,尤其是把文本左右对齐,排列整齐,符合美观的标准。话不多说,让我们进入今天的主题。

我们都知道,在显示文本时,通常有三种对齐方式:左对齐、右对齐和居中对齐。大多数编辑器都会默认将文本左对齐,但在一些特殊场合,比如排版、简历、报告或者文章中,可能就需要我们手动控制文本的对齐方式。

问题的要求其实很简单:给定一个字符串数组words,你需要将这些字符串合并成若干行,每行字符的总长度要与给定的maxWidth保持一致。

每行的字符应该是左右对齐的,具体来说,要尽量均匀分布单词之间的空格。如果最后一行的字符数不足maxWidth,则直接左对齐,剩余的空格都放在行末。

思路解析

  1. 基本操作:我们首先要做的就是逐行填充,直到每一行达到maxWidth的长度。
  2. 填充空格:然后,对于每一行的空格,我们需要做的就是让它们尽可能均匀分布。如果某行有n个空格,我们需要把这些空格分配到该行的单词之间。
  3. 处理最后一行:最后一行的空格只需要留在行尾,且不需要进行复杂的均匀分配。

接下来,我们来一步步实现这个功能。

我们将通过一个简单的算法来实现这个功能。首先,假设输入为一个数组words和一个整数maxWidth。我们的目标是返回一个字符串数组,其中每一行的字符数不超过maxWidth,且尽可能做出左右对齐。

var fullJustify = function(words, maxWidth{
    let result = [];
    let currentLine = [];
    let currentLength = 0;

    for (let i = 0; i < words.length; i++) {
        // 如果当前行添加当前单词后不超过 maxWidth
        if (currentLength + words[i].length + currentLine.length <= maxWidth) {
            currentLine.push(words[i]);
            currentLength += words[i].length;
        } else {
            // 当当前行填满,进行处理
            result.push(justifyLine(currentLine, currentLength, maxWidth));
            // 重置当前行
            currentLine = [words[i]];
            currentLength = words[i].length;
        }
    }
    
    // 处理最后一行
    result.push(justifyLine(currentLine, currentLength, maxWidth, true));
    
    return result;
};

// 辅助函数:处理每行的空格分配
function justifyLine(words, currentLength, maxWidth, isLastLine = false{
    let totalSpaces = maxWidth - currentLength;
    if (isLastLine || words.length === 1) {
        // 最后一行或者只有一个单词的情况,空格放在末尾
        return words.join(' ') + ' '.repeat(totalSpaces);
    }
    
    let spaceBetweenWords = Math.floor(totalSpaces / (words.length - 1));
    let extraSpaces = totalSpaces % (words.length - 1);

    // 将空格均匀分配给每两个单词之间
    let result = words[0];
    for (let i = 1; i < words.length; i++) {
        let spaces = spaceBetweenWords + (i <= extraSpaces ? 1 : 0);
        result += ' '.repeat(spaces) + words[i];
    }
    
    return result;
}
假设我们有以下输入:
let words = ["This""is""an""example""of""text""justification"];
let maxWidth = 16;

执行fullJustify(words, maxWidth)会返回如下的结果:

[
  "This    is    an",
  "example  of text",
  "justification  "
]

可以看到,第一行的单词之间的空格分布是均匀的,第二行也做了类似的处理,而最后一行则将剩余的空格加在了末尾。

目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。

虎哥私藏精品 热门推荐

虎哥作为一名老码农,整理了全网最前端资料合集

资料包含了《前端面试题PDF合集》、《前端学习视频》、《前端项目及源码》,总量高达108GB。

全部免费领取全面满足各个阶段程序员的学习需求!

web前端专栏
回复 javascript,获取前端面试题。分享前端教程,AI编程,AI工具,Tailwind CSS,Tailwind组件,javascript教程,webstorm教程,html教程,css教程,nodejs教程,vue教程。
 最新文章