再多a一道
时隔两年重拾算法,希望自己能再多a一道
konghhhhh
记录自己的学习过程
展开
-
数组中01,可以将数组的一段翻转(0 变 1, 1 变 0),求翻转后数组最多1的个数
这道题的关键思想:翻转 0 变 1 ,相当于让 1 的个数 +1翻转 1 变 0 ,相当与让 1 的个数 -1解题思路:根据原来的数组 a[] 构造一个新的数组 b[],若 a[i] = 0 则 b[i] = 1若 a[i] = 1 则 b[i] = -1对 b[] 求最长子段和,包含最长子段和的区间就是进行01翻转的区间。代码略...原创 2022-04-18 19:14:33 · 1245 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
LeetCode剑指 Offer 16. 数值的整数次方代码实现能力错误1:对于n很大时求幂,直接遍历,超时。错误2:对于n在边界时(2^31-1),直接做加法,越界。错误3:进行二分求幂,重复调用两次,超时。例如:reuturn pow(x, n/2) * pow(x, (n+1)/2);这里重复了,至于一次,用一个变量tmp记录即可。思路+代码:class Solution {public: // 二分求幂运算 // 第一次错误: return myP原创 2021-05-12 21:35:33 · 63 阅读 · 0 评论 -
leetcode 剑指 Offer 14- I. 剪绳子
LeetCode剑指 Offer 14- I. 剪绳子主站 343思路+代码:/** * 872.叶子相近的树 * * 思路: * 一. 贪心 * 尽可能减成长度为3的小绳子,可保证长度最长 * 二. 动态规划(1) * 1. 用dp[i]表示长度i的绳子剪成m段时的最大乘积,初始化dp[2]=1, * 2. 先把绳子剪掉一段j,考虑剩余部分,(因为剪掉1对乘积无增益,所以2起步剪) * 3. 剪掉j后,剩下(i-j)可以剪可以不剪,不剪的原创 2021-05-10 21:23:35 · 81 阅读 · 0 评论 -
top-K问题 第k小的数
链接:LeetCode题意:求第k小的数,或前k小的数。方法一:快排,直接前k个好了。(nlogn)。方法二:普通暴力,一遍遍历,设一个数组维护前k个数。O(nk)方法三:优化二,数组换成堆,O(nlogk)。方法三:BFPRT算法,线性查找,时间复杂度O(n)。实质上是类似于快速排序的过程,不过快排中选pivot是选的最边上值,而这里选择了一种中位数的中位数方法()知乎上一个关于复杂度的计算概括:未完待续...原创 2020-09-22 15:55:38 · 140 阅读 · 0 评论 -
整数拆分求乘积最大(DP)
链接:leetcode题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。说明: 你可以假设 n 不小于 2 且不大于 58。方法一:也就是我的第一想法,就是暴力深搜。题解上面有这个解法,也就是说可以。但是具体一点,要有必要的剪枝,加上记忆化搜索。确实是太久没上手做题了,自己想解题思路的时候死活没想到记忆华搜索这回事来。要努力吧!方法二:这是个数学规律。拆的越多越好,拆成3333***,最后剩一个再乘。方法三:真正的方法,DP。把原创 2020-09-22 15:07:36 · 5423 阅读 · 3 评论