ARTS 打卡第10周

89 阅读2分钟

1、Algorithm 一道算法题

多数元素

给定一个大小为 n **的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

由于空间复杂度要求是 O(1),因此需要考虑使用双指针的方法:第一个指针last指向上一个代表多数元素的索引,第二个指针 i 指向遍历数组的元素下标;使用一个变量 count 记录多数元素比其他元素出现次数多的次数。 每次遍历时如果当前指针元素与上一个代表多数元素的值不相等,则采用“同归于尽”法,即不计算其他元素,同时多数元素的次数 count 减 1,当 count 等于 0 时,更新 last 指针指向当前指针,将当前指针的值视为多数元素,继续遍历。

代码:

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
    let last = 0, count = 1;
    const len = nums.length;

    // 双指针
    for (let i = 1; i < len; i++) {
        if (nums[last] === nums[i]) {
            count++;
        } else {
            if (count === 0) {
                // 更新多数元素为当前元素
                last = i;
                count = 1;
            } else {
                count--;
            }
        }
    }

    return nums[last];
};

2、Review 读一篇英文文章

3、Technique/Tips 分享一个小技术

前端实现单点登陆

单点登录有个简称是sso,它是一个功能可以控制多个有联系的系统操作,简单地理解为通过单点登录可以让用户只需要登录一次软件或者系统,那么同系统下的平台都可以免去再次注册、验证、访问权限的麻烦程序,通俗易懂的理解为一次性登录也可以一次性下线。

单点登录主要有三种实现方式:

  1. 父域 Cookie
  2. 认证中心
  3. LocalStorage 跨域

对于后端而言,一般使用 OAUth2.0 技术,极客时间上有专门的课程讲解

4、Share 分享一个观点

提高表达能力有3种方法:

  1. 找到自己最好听的声音频率,让自己的声音听起来悦耳
  2. 说话有逻辑感,话语之间尽量添加起承转合的连接词
  3. 建立自己的语料库,在不同场合和不同的人随时找到话题聊,并且要能自己表达一些事实和观点