Algorithm

LeetCode Two Sum

题目

给定一个数组,返回相加能得到目标值的两个数的序号

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

暴力解法

时间:O(n^2) 空间:O(n)

for i in range(len(nums)-1):
    for j in range(i+1, len(nums)):
        if nums[i] + nums[j] == target:
            return [i, j]

利用字典

时间:O(n) 空间:O(n)

mem = {}
for i,j in enumerate(nums):
    if target-j in mem:
        return [mem[target-j], i]
    mem[j] = i

衍生题:Two sum with input array sorted

Two Sum II - Input array is sorted

题目与 two sum 类似,不同的是现在输入的数组是递增排序好的。当然,此题仍可以使用上题的通用解法。不过,我们可以利用数组有序这一点来优化之前的做法。

解法:
因为数组是有序的,所以我们可以利用指针。当左右之和大于目标值时,右指针左移;之和小于目标值时,左指针右移。

left = 0
right = len(numbers)-1
    
while left<right:
    if numbers[left]+numbers[right] > target:
        right -= 1
    elif numbers[left]+numbers[right] < target:
        left += 1
    else:
        return [left+1, right+1]

Review

本周 Review 文章:Designing for accessibility is not that hard

本文介绍了几个设计中增强页面无障碍性的几个建议。

  1. 确保颜色的对比明显。这个问题常常被忽略,低对比度会对弱视人士浏览页面带来障碍。
  2. 不要仅仅使用颜色来指示关键消息。可以选择附上文字或者添加一些纹理,以减轻色盲人士的困扰。
  3. 使用某种方法来指示当前获得焦点的元素。便于键盘访问。
  4. 使用 Label 来指示表单。一个常见的错误做法是使用 Placeholder 替代 Label。要知道,屏幕阅读器通常会忽略 Placeholder。
  5. 所有的图片(以及其它非文字内容)都要写 Alt 信息。你可以选择使用 alt 属性或者在图片周围加上补充说明。
  6. 使用恰当的语义化标签。
  7. 支持键盘导航。允许用户完全通过键盘来浏览。参考 ARIA(MDN)

可使用 Chrome 的 aXe-Coconut 插件测试页面的无障碍性。

可参考:网页内容无障碍性 AA 级规范

Tip

参考:Array 的三个技巧

空数组迭代问题:
因为 JavaScript 是一门弱类型的语言,由 JavaScript 直接创建的数组变量是松散的。

const arr = new Array(4);
// => [undefined, undefined, undefined, undefined]
arr.map((ele, idx) => idx);
// => [undefined, undefined, undefined, undefined]

解决方法:使用Array.apply()

const arr = Array.apply(null, new Array(4));
arr.map((elem, index) => index);
// => [0, 1, 2, 3]

Share

源自本人翻译的一篇文章JavaScript 是如何工作的:深入网络层 + 如何优化性能和安全

简单几步提高 Web 应用性能和安全性:

  1. 请求中始终使用「Connection:Keep-Alive」头部字段。浏览器默认这样做。确保服务器使用相同的机制。
  2. 使用正确的 Cache-Control、Etag 和 Last-Modified 头部字段,这样可以节约一些浏览器下载时间。
  3. 花时间调整并优化您的 Web 服务器。这才是真正的魔法发生的地方!请记住,该过程要针对每个 Web 应用程序以及您要传输的数据的类型对症下药。
  4. 始终使用 TLS!特别是如果您的应用程序中有任何形式的身份验证。
  5. 研究浏览器在您的应用程序中提供并实施了哪些安全策略。

标签: none

添加新评论