笔记

51 阅读1分钟

快慢指针

  • 题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点。
  • 思路:设置两个指针,一个快指针,一次走两格(是慢指针的两倍),一个慢指针,一次走一格。
  • 假设需要返回三分之一的节点,同理也是,快指针走1/返回节点的比例

动态规划

题目:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天你可以决定是否购买和/或出售股票。你在任何时候最多 只能持有 一 股票。你也可以先购买,然后在 同一天出售。返回你能获得的最大利润 。

思路:

  • 设置一个二维数,定义状态,dp[i] [0] 表示第i天交易完,手里没有股票的最大利润。dp[i] [1] 表示第i天交易完,手里有股票的最大利润。
  • 因此,可以得出
  • dp**[i]** [0] = max{dp**[i-1]** [0],dp[i-1] [1] + price }:此时状态从买入到卖出,获取收益price,状态变为没有持有股票
  • dp[i] [1] = max{dp[i-1] [1],dp [i-1] [0] - price }:此时状态从卖出到买入,扣取price,状态变为持有股票
    • i-1代表前一天,状态变化是前一天的状态。
  • 在初始日,i=0,因此,dp[0] [0] = 0,dp[0] [1] = -price

位运算

异或运算:

  1. 任何数与0做异或运算,结果为本身
  2. 任何数与自身做异或运算,结果为0