• 划分字母区间


    题目描述

    字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

    示例:

    输入:S = “ababcbacadefegdehijhklij”
    输出:[9, 7, 8]
    解释:
    划分结果为 “ababcbaca”, “defegde”, “hijhklij”。
    每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。

    提示:

    • S的长度在 [1, 500] 之间。
    • S只包含小写字母 ‘a’ 到 ‘z’。
  • 有序数组的平方


    题目描述

    给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

    示例 1:

    输入:[-4, -1, 0, 3, 10]
    输出:[0, 1, 9, 16, 100]

    示例 2:

    输入:[-7, -3, 2, 3, 11]
    输出:[4, 9, 9, 49, 121]

  • 填充每个节点的下一个右侧节点指针


    题目描述

    给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

    1
    2
    3
    4
    5
    6
    struct Node {
    int val;
    Node *left;
    Node *right;
    Node *next;
    }

    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。

    示例:

    输入:{“$id”:”1”,”left”:{“$id”:”2”,”left”:{“$id”:”3”,”left”:null,”next”:null,”right”:null,”val”:4},”next”:null,”right”:{“$id”:”4”,”left”:null,”next”:null,”right”:null,”val”:5},”val”:2},”next”:null,”right”:{“$id”:”5”,”left”:{“$id”:”6”,”left”:null,”next”:null,”right”:null,”val”:6},”next”:null,”right”:{“$id”:”7”,”left”:null,”next”:null,”right”:null,”val”:7},”val”:3},”val”:1}
    输出:{“$id”:”1”,”left”:{“$id”:”2”,”left”:{“$id”:”3”,”left”:null,”next”:{“$id”:”4”,”left”:null,”next”:{“$id”:”5”,”left”:null,”next”:{“$id”:”6”,”left”:null,”next”:null,”right”:null,”val”:7},”right”:null,”val”:6},”right”:null,”val”:5},”right”:null,”val”:4},”next”:{“$id”:”7”,”left”:{“$ref”:”5”},”next”:null,”right”:{“$ref”:”6”},”val”:3},”right”:{“$ref”:”4”},”val”:2},”next”:null,”right”:{“$ref”:”7”},”val”:1}
    解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。

    提示:

    • 你只能使用常量级额外空间。
    • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
  • 环形链表


    题目描述

    给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    如果链表中存在环,则返回 true 。 否则,返回 false 。

    进阶:

    你能用 O(1)(即,常量)内存解决此问题吗?

    示例 1:

    输入:head = [3, 2, 0, -4], pos = 1
    输出:true
    解释:链表中有一个环,其尾部连接到第二个节点。

  • OC 内存管理的基本概念

    OC 内存管理的基本概念###1. 内存管理的基本概念 栈区 stack 堆区 heap heap(堆)是最自由的一种内存,它完全由程序来负责内存的管理,包括什么时候申请,什么时候释放,而且对它的使用也没有什么大小的限制。在C/C+...
  • 监控进程内存

    缘由需要获取某程序运行过程中的内存消耗,一般情况可以使用 top 命令来人工分析,不过我遇到一个程序其内部调用包括 python, R, 以及一系列 linux 命令,这就导致人工统计不太现实 问题变成统计进程及其子进程的内存使用,可以通过 pstr...
  • 删除排序数组中的重复项


    题目描述

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    示例1:

    给定数组 nums = [1, 1, 2],
    函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。

    示例2:

    给定 nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4],
    函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。

    说明:

    为什么返回数值是整数,但输出的答案是数组呢?
    请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
    你可以想象内部操作如下:

    1
    2
    3
    4
    5
    6
    7
    8
    // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
    int len = removeDuplicates(nums);

    // 在函数里修改输入数组对于调用者是可见的。
    // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
    for (int i = 0; i < len; i++) {
    print(nums[i]);
    }
  • 组合


    题目描述

    给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

    示例:

    输入: n = 4, k = 2
    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    [
    [2,4],
    [3,4],
    [2,3],
    [1,2],
    [1,3],
    [1,4],
    ]
  • UWP经验 - 通过Win32 API读写文件

    按照《向文件进行写入的最佳做法》这篇文档所述,UWP中推荐的做法是使用FileIO或者PathIO进行文件读写。这没问题,但这俩工具类都各有缺陷:

    • FileIO建立在StorageFile基础上,想读写,先拿到StorageFile
    • PathIO可以通过路径,但默认仅限于应用文件夹,其它目录没权限(需要一些特殊操作)。

    那么有没有既能通过路径获取文件,又没有严格的权限限制的方法呢?当然有了!

  • UWP经验 - 如何大幅提高UWP的文件遍历速度

    在UWP中,通常是使用StorageFile进行文件相关的操作,大多数情况下,这没有问题。但如果涉及到文件夹遍历,你就会发现建立在Storage基础上的文件查询太慢了。

    以一个普通的VuePress前端项目为例,在加载完本地依赖后,整个项目文件数量在20,000个左右(包括node_modules)。使用StorageFolder.GetItemsAsync(),然后循环递归查询,耗时约4分半。

    试想,如果你要做一个编辑器,展示文件树,打开应用后可能要等5分钟才能完全加载完,这简直是噩梦。

    但现在,通过公开的Win32 API,我们可以直接把时间压缩在4秒左右,这种文件查询速度绝对是一个飞跃式的提升(尽管可能比不上真正的Win32应用查询速度)。