算法
百物易用是苏生
企鹅小兵,搞搞大数据
展开
-
算法:leetcode 1423. 可获得的最大点数
https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/class Solution(object): def maxScore(self, cardPoints, k): """ :type cardPoints: List[int] :type k: int :rtype: int """ #方法一暴力尝原创 2021-02-07 00:19:35 · 308 阅读 · 0 评论 -
算法:字节跳动单向链表K长度一组逆序重组
链表反转:给定一个单链表,每k个为一组,一组内的元素反转。如输入: 1-2-3-4-5-6-7-8,k=3,输出:3-2-1-6-5-4-8-7。==每个节点的指针地址不变==倒霉,题意理解歪了,所以还是要认真看题,傻逼了,有个指针地址不变利用堆栈即可,什么特么的不仔细看题,自己给自己加戏,以为要改指针形成新链表,活该自己倒霉了代码 python2:# -*- coding: utf-8 -*-"""Created on Wed Feb 3 16:13:38 2021@author原创 2021-02-03 16:50:17 · 276 阅读 · 0 评论 -
算法:经典七节 题目一 LRU内存淘汰机制算法
LRU:数据 Map(K,V) key的value是计算的用户访问key这个内容最近访问的时间根据时间排序,内存不够时,将最久未访问(时间最老(小))的记录删除要求:put/get 时间复杂度O(1)getO(1)容易想到数组,但是数据结构新增删除容量变化移动难,那么就是hashmap记录指针,然后双向链表维护时间顺序中间涉及重复访问的,先删除,再增加到tail尾巴处如果要访问的已经时tail尾巴,就不需要更新如果头部被访问了要移动到tail,需要细节处理,head指向次头有空再尝试代码原创 2021-01-30 21:15:33 · 210 阅读 · 0 评论 -
算法:经典六节 题目三 完全二叉树节点个数,时间复杂度低于O(N)
O(N)一般代表全遍历一边低于O(N)那就是想方法不用全部遍历,就能得出结果完全二叉树就是它的性子,除了最后一层右边可能缺,其它层以及最后一层左边是满的关键点:怎么不全遍历而确定最后一层哪里不满的,二分思想,左子树最左边深度,右子树最左边深度计算时间复杂度:总深度h,中间不断的h-1 h-2探测 是h**2的复杂度 h=log(N)数量级最后时间复杂度 O((logN)**2)代码后续再补...原创 2021-01-30 20:59:02 · 183 阅读 · 0 评论 -
算法:经典题六 题目一 字符串最少删除多少字符变成目标字符串的子串
能返回最少删除字符个数,极端空串eg: s1='abcde ’ s2=‘axbc’ [s2删除多少字符变成s1的子串]方法一:当s2比较短的时候,且短于s1长度,可以s2暴力其子串,按照长度排序,依次用KMP算法查看是否是s1的子串,有立即返回方法二:s1短于s2,s1的子串,跟s2算编辑距离 big o(N**3 * M)[编辑距离用s1插入变成s2的最小编辑距离,只给插入,或者反过来s2变成s1的子串,只给删除]编辑距离算法:算法:经典题六 题目二最小编辑距离[每年常考题,工作中也容易用原创 2021-01-30 20:43:45 · 1369 阅读 · 0 评论 -
算法:经典题六 题目二最小编辑距离[每年常考题,工作中也容易用到]
输入:两个字符串str1和str2,三个整数ic、dc和rc,分别代表插入、删 除和替换一个字符的代价输出:str1编辑成str2的最小代价eg:str1=“abc”,str2=“adc”,ic=5,dc=3,rc=2 从"abc"编辑成"adc",把’b’替换成’d’是代价最小的,所以返回2str1=“abc”,str2=“adc”,ic=5,dc=3,rc=100 从"abc"编辑成"adc",先删除’b’,然后插入’d’是代价最小的,所以返回8str1=“abc”,str2=“abc”,ic原创 2021-01-30 20:22:46 · 421 阅读 · 0 评论 -
算法:经典题六 题目七 子矩阵最大累加和
输入:整形矩阵输出:子矩阵的最大累加和参见一维最大累加和:算法:经典题六 题目六 数组中子数组最大累加和在二维上,利用一维累加和形式,在每一步记录的最大累加和填充二位dp大流程,必定遍历0~0一行,0~2行,0~3行,。。。0~N-1行 1~1行,1~2,。。。1-N~1行 2~2行,。。。2~N-1行 ... 在这个大流程中,还有中间的 0~M-1列也是这样的框架嵌入进去, 但是中间可以利用之前N次的N遍历,求出二维dp[i][j]代表i行中,只针对i行原创 2021-01-30 18:18:41 · 153 阅读 · 0 评论 -
算法:经典题六 题目六 数组中子数组最大累加和
输入:数组arr输出:子数组中最大累加和 (连续的,不是子序列)连续子数组,还是子序列?==》子数组 隐含概念,连续的关键点:连续累加不小于0就加进来,小于零了,前面累加的都不要了,从新从0开始累加curr记录累加,只要curr不小于零,一直累加,因为curr>=0对下一个数字为结尾的都有用,但curr<0了就不是最大的了;curr每次添加进来一个数字, curr<0:curr更新为0,丢弃curr前面累加的,此时max更新为之前max、当前数字的最大值(为什么,因为可能全负数原创 2021-01-30 18:01:11 · 138 阅读 · 0 评论