0%

题目

LeetCode.918.环形子数组的最大和(中等)

给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。

在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],且当 i >= 0 时 C[i+A.length] = C[i])

此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.length = k2 % A.length)

阅读全文 »

题目

LeetCode.740.删除并获得点数(中等)

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

阅读全文 »

题目

LeetCode.746.使用最小花费爬楼梯(简单)

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。

每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。

请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。

阅读全文 »

题目

LeetCode.120.三角形最小路径和(中等)

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

阅读全文 »

题目

LeetCode.309.最佳买卖股票时机含冷冻期(中等)

给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
阅读全文 »

TraceCanary原理概述

监控主线程卡顿有两种方案:

  1. 监控主线程Looper的相邻两次的dispatchMessage的耗时;
  2. 通过Choreographer监控相邻两次垂直同步信号的时间差。

当耗时超过阈值,导出当前主线程的堆栈,分析堆栈。

这两种方法的问题在于,导出的堆栈中并不一定有导致卡顿的方法,无法获取到每个函数的调用耗时,判断并不准确。

所以就用ASM对App的每个方法做了字节码插桩,在函数执行的执行前后打点统计函数耗时。为每个插桩的函数分配一个独立的ID,在插桩完成后输出一份ID和方法名的映射表,以供分析。

阅读全文 »