0%

题目

LeetCode 53. 最大子序和

思路

  • 对数组进行遍历,当前最大连续子序列和为 sum,缓存结果为 ans
  • 如果 sum > 0,则说明 sum 结果是好的, 累加当前遍历的值
  • 如果 sum <= 0,则sum结果是坏的, 需要舍弃,则 sum 直接更新为当前遍历的值
  • 每次比较 sum 和 ans的大小,将最大值置为ans,遍历结束返回结果
    阅读全文 »

题目

LeetCode 2. Add Two Numbers

思路

  1. 两个逆序存储数值的链表, 要求返回数值相加结果并且逆序存储的链表.

  2. 就两个链表一起遍历, 每一位相加:

    • 若小于10直接拼接到新链表中
    • 若大于10, 则个位数拼接到新链表, 十位数加入到下一个链表节点的计算中(实际就是进位)

其实就是两数相加, 链表的头节点就是个位, 依此类推.

阅读全文 »

题目

LeetCode 19. Remove Nth Node From End of List

思路

思路一:

  1. 单链表, 无法从尾结点往前遍历. 那么可以将倒数第N个结点转为第L-N+1个正数节点
  2. 长度L可以提前遍历一次来求值
  3. 移除第L - N + 1个节点

思路二:

  1. 利用双指针
  2. 先让两个指针相隔N - 1的位置
  3. 然后双指针同步后移
  4. 当第二个指针到了尾部, 第一个指针恰好在倒数第N个节点的前驱位置.
    阅读全文 »

题目

LeetCode 6. ZigZag Conversion

思路

  1. 最开始想的就是一个二维数组, 它把原字符串, 按照规律放入固定位置, 最后再拼接
  2. 那么又分为两个问题
    • 二维数组要考虑越界和合并判断问题
    • 这个Z(明明是N!)的规律是什么
  3. 关于Z的规律只能说, 在纸上画一下2行,3行的情况, 发现规律是2n-2个字母为一个循环周期, 再拿4行验证一下
  4. 另外选用了字符串来替代一维数组, 直接拼接保存该行
    阅读全文 »

题目

LeetCode 189. Rotate Array

思路

实现1: 利用一个额外的数组

  1. 目标: 将数组1中每一个元素, 移动到额外数组目标索引位置
  2. 目标索引 = (现在位置 + 步数) % 长度
  3. 最终将额外数组元素再复制回原数组
    PS: 这里要注意 java中 Arrays.copyOf(), System.arraycopy(), clone() (对象是深拷贝, 对数组是浅拷贝) 几种浅拷贝

实现2: 分析数组翻转后的元素排列, 使用位置互换

阅读全文 »