1 | 给定一个 n × n 的二维矩阵表示一个图像。 |
先把矩阵转置,再反转矩阵得到新的矩阵
1 | class Solution { |
每次替换四个元素(四个角)
1 | class Solution { |
1 | 作者:LeetCode-Solution |
1 | 给定一个 n × n 的二维矩阵表示一个图像。 |
1 | class Solution { |
1 | class Solution { |
1 | 作者:LeetCode-Solution |
难度简单201
输入整数数组 arr
,找出其中最小的 k
个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
1 | 输入:arr = [3,2,1], k = 2 |
示例 2:
1 | 输入:arr = [0,1,2,1], k = 1 |
限制:
0 <= k <= arr.length <= 10000
0 <= arr[i] <= 10000
如果当前的数大于大根堆的最大值,则使用当前的数替换掉大根堆中的最大的值
1 | class Solution { |
时间复杂度O(nlogk)
空间复杂度O(k)
1 | class Solution { |
1 | 作者:LeetCode-Solution |
1 | 给定两个字符串 s 和 t,它们只包含小写字母。 |
1 | class Solution{ |
分别计算s和t中的所有字符的ASCII值的和,两个和的差值是t中多余的那个字符的ASCII的值。
1 | class Solution { |
异或运算有以下三个性质:
1 | class Solution { |
1 | 作者:LeetCode-Solution |
1 | 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 |
1 | class Solution { |
1 |
|
1 | class Solution { |
1 | 作者:LeetCode-Solution |
1 | 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 |
1 | /** |
1 | 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 |
1 | /** |
1 | 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。 |
dp[i][0] 的转移方程,如果这一天交易完后手里没有股票,那么可能的转移状态为前一天已经没有股票,即dp[i−1][0],或者前一天结束的时候手里持有一支股票,即dp[i−1][1],这时候我们要将其卖出,并获得prices[i] 的收益,但需要支付fee的手续费。因此为了收益最大化,列出如下的转移方程:
1 | dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i] - fee); |
dp[i][1]按状态转移,那么可能的转移状态为前一天已经持有一支股票,即dp[i−1][1],或者前一天结束时还没有股票,即dp[i−1][0],这时候我们要将其买入,并减少prices[i] 的收益。可以列出如下的转移方程:
1 | dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i]); |
1 | class Solution { |
方法一中,我们将手续费放在卖出时进行计算。如果我们换一个角度考虑,将手续费放在买入时进行计算,那么就可以得到一种基于贪心的方法。
我们用buy 表示在最大化收益的前提下,如果我们手上拥有一支股票,那么它的最低买入价格是多少。在初始时,buy 的值为 prices[0] 加上手续费 fee。那么当我们遍历到第 i(i>0) 天时:
如果当前的股票价格prices[i] 加上手续费fee小于buy,那么与其使用buy 的价格购买股票,我们不如以 prices[i]+fee 的价格购买股票,因此我们将buy 更新为prices[i]+fee;
如果当前的股票价格prices[i] 大于buy,那么我们直接卖出股票并且获得prices[i]−buy 的收益。但实际上,我们此时卖出股票可能并不是全局最优的(例如下一天股票价格继续上升),因此我们可以提供一个反悔操作,看成当前手上拥有一支买入价格为prices[i] 的股票,将 buy 更新为 prices[i]。这样一来,如果下一天股票价格继续上升,我们会获得 prices[i+1]−prices[i] 的收益,加上这一天prices[i]−buy 的收益,恰好就等于在这一天不进行任何操作,而在下一天卖出股票的收益;
对于其余的情况,prices[i] 落在区间[buy−fee,buy] 内,它的价格没有低到我们放弃手上的股票去选择它,也没有高到我们可以通过卖出获得收益,因此我们不进行任何操作。
上面的贪心思想可以浓缩成一句话,即当我们卖出一支股票时,我们就立即获得了以相同价格并且免除手续费买入一支股票的权利。在遍历完整个数组prices 之后之后,我们就得到了最大的总收益。
1 | class Solution { |
参考文献
1 | 作者:LeetCode-Solution |
1 | 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 |
1 | /** |
1 | 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 |
1 | /** |
1 | 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 |
1 | class Solution { |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true