牛客算法题
。
Aiclin
这个作者很懒,什么都没留下…
展开
-
1000. 合并石头的最低成本(H)/ 1312. 让字符串成为回文串的最少插入次数(H)/ 区间DP!!!
【代码】1000. 合并石头的最低成本(H)/ 1312. 让字符串成为回文串的最少插入次数(H)/ 区间DP!!!原创 2024-04-24 01:04:22 · 198 阅读 · 0 评论 -
计算数组的小和
题解# 主函数def get_smallSum(arr): if not arr or len(arr) < 2: return 0 return smallSum(arr, 0, len(arr)-1)# 递归进行【归】def smallSum(arr, l, r): #负责递归的终止条件,并且是最后一层子函数的返回值 if l == r: return 0 #没一个子函数都包括三部分 ..原创 2021-09-02 23:48:50 · 237 阅读 · 0 评论 -
数组分成两部分的计算
def fun(nums): n = len(nums) left_sum = [0] * n right_sum = [0] * n left_mean = [0] * n right_mean = [0] * n nums.sort() # 是否需要排序?# print(nums) cur_sum = 0 for i in range(n): cur_sum += nums[i]原创 2021-08-22 23:35:43 · 231 阅读 · 0 评论 -
最小生成树 / 1135. 最低成本联通所有城市(M)
最小生成树## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## 返回最小的花费代价使得这n户人家连接起来# @param n int n户人家的村庄# @param m int m条路# @param cost int二维数组 一维3个参数,表示连接1个村庄到另外1个村庄的花费的代价# @return int##克鲁斯卡尔(选最小边,直至有n-1条边)class Solution: def miniSpanningTree(self , ..原创 2021-06-19 13:43:40 · 208 阅读 · 0 评论 -
KMP算法
KMP算法## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## 计算模板串S在文本串T中出现了多少次# @param S string字符串 模板串# @param T string字符串 文本串# @return int整型#class Solution: def kmp(self , S , T ): def getnext(S): ''' 计算next数组是KMP算法的核心 ..原创 2021-06-19 13:00:41 · 87 阅读 · 0 评论 -
比较版本号
## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## 比较版本号# @param version1 string字符串 # @param version2 string字符串 # @return int整型#class Solution: def compare(self , version1 , version2 ): # write code here nums1 = version1.split('.') ..原创 2021-06-19 01:00:29 · 116 阅读 · 0 评论 -
135. 分发糖果(Hard)/ 888. 公平的糖果棒交换(Easy)
## pick candy# @param arr int整型一维数组 the array# @return int整型#class Solution: def candy(self , arr ): # write code here ans = [1] * len(arr) # 先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数加1 for i in range(1, len(arr)): .原创 2021-06-19 00:51:03 · 151 阅读 · 0 评论 -
无序数组中和为 S 的最长子数组【连续的】
## max length of the subarray sum = k# @param arr int整型一维数组 the array# @param k int整型 target# @return int整型#class Solution: def maxlenEqualK(self , arr , k ): # write code here sum_map = {0: -1} # 初始化和为0的下标为-1 curr_sum = .原创 2021-06-19 00:41:59 · 170 阅读 · 0 评论 -
222. 完全二叉树结点数(Easy)/ 96. 不同的二叉搜索树(Medium)/ 判断二叉搜索树与完全二叉树
# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None## # @param head TreeNode类 # @return int整型#class Solution: def nodeNum(self , head ): # write code here .原创 2021-06-18 00:21:40 · 165 阅读 · 0 评论 -
将升序数组转化为平衡二叉搜索树
# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None ### @param num int整型一维数组# @return TreeNode类#class Solution: def sortedArrayToBST(self , num ): if len(num) == 0.原创 2021-06-17 00:28:00 · 168 阅读 · 0 评论 -
37. 解数独(Hard)/ 36. 有效的数独(M)
## # @param board char字符型二维数组 # @return void#class Solution: def solveSudoku(self , board ): row = [set(range(1, 10)) for _ in range(9)] # 行剩余可用数字 col = [set(range(1, 10)) for _ in range(9)] # 列剩余可用数字 block = [set(range..原创 2021-06-17 00:30:03 · 90 阅读 · 0 评论 -
二叉搜索树中两个【交换位置】的节点
# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None## # @param root TreeNode类 the root# @return int整型一维数组#class Solution: ### 法一:递归 def findError(self , root ): .原创 2021-06-16 00:40:27 · 176 阅读 · 0 评论 -
阶乘末尾0的数量
思路## the number of 0# @param n long长整型 the number# @return long长整型#class Solution: def thenumberof0(self , n ): # write code here res = 0 while n > 0: res += n // 5 n //= 5 return res.原创 2021-06-16 00:25:44 · 128 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(Easy)
## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## # @param array int整型一维数组 # @return int整型一维数组#class Solution: # 法一:不开额外数组,借鉴冒泡排序,交换相邻的偶数与奇数 def reOrderArray(self , array ): # write code here if not array: return [] .原创 2021-04-21 13:44:50 · 92 阅读 · 0 评论 -
44. 通配符匹配(Hard)
## # @param s string字符串 # @param p string字符串 # @return bool布尔型#class Solution: def isMatch(self , s , p ): # write code here# 同样判断4种情况# 1. p[j]=='?' || s[i]==p[j] 那么 i++; j++# 2. p[j]== '*' 那么 ri = i ; rj = j;.原创 2021-04-12 23:05:25 · 110 阅读 · 0 评论 -
二进制中1的个数
# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): res = 0 if n < 0: n = n & 0xffffffff while n: # 法一 res += 1 n = n & (n-1) # 法二.原创 2021-04-10 22:43:21 · 99 阅读 · 0 评论 -
162. 寻找峰值(M)
## 寻找最后的山峰# @param a int整型一维数组 # @return int整型#class Solution: def solve(self , a ): # write code here # 因为需要寻找下标最大的,则从后往前寻找第一个峰值即可 for i in range(len(a)-1, -1, -1): if a[i] > a[i-1]: return .原创 2021-04-10 22:29:03 · 100 阅读 · 0 评论 -
验证IP地址
## 验证IP地址# @param IP string字符串 一个IP地址字符串# @return string字符串#class Solution: def solve(self , IP ): # write code here IP = IP.lower() if IP.count('.') == 3 and IP.count(':') == 0: IP = IP.split('.') ..原创 2021-04-10 22:03:01 · 132 阅读 · 0 评论 -
带权树的直径(Hard)
# class Interval:# def __init__(self, a=0, b=0):# self.start = a# self.end = b## 树的直径# @param n int整型 树的节点个数# @param Tree_edge Interval类一维数组 树的边# @param Edge_value int整型一维数组 边的权值# @return int整型#class Solution: # 树形dp? .原创 2021-04-08 23:06:14 · 185 阅读 · 0 评论 -
二叉搜索树的第 K 个结点(230. 二叉搜索树中第 K 小的元素)
# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: ### 递归 def __init__(self): self.idx = 0 def KthNode(self, pRoo.原创 2021-04-08 22:30:06 · 88 阅读 · 0 评论 -
字符串变形(大小写变换,方向变换)
# -*- coding:utf-8 -*-class Solution: def trans(self, s, n): # write code here res = [] ls = s.split(' ')[::-1] # 指定' ',即对每个空格分开;若不指定则将所有空格视为一个空格分开 for w in ls: tmp = '' for ch in w: .原创 2021-04-08 22:13:29 · 151 阅读 · 0 评论 -
887. 鸡蛋掉落(Hard) / 丢棋子问题
## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可# 返回最差情况下扔棋子的最小次数# @param n int整型 楼层数# @param k int整型 棋子数# @return int整型#import mathclass Solution: def solve(self , n , k ): # write code here if n < 1 or k < 1: return 0 i..原创 2021-04-06 11:05:11 · 200 阅读 · 0 评论 -
328. 奇偶链表(链表的奇偶重排)(Medium)
# class ListNode:# def __init__(self, x):# self.val = x# self.next = None# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可# # @param head ListNode类 # @return ListNode类#class Solution: def oddEvenList(self , head ): # write co.原创 2021-04-02 22:49:00 · 149 阅读 · 0 评论 -
199. 二叉树的右视图(Medium)/ 404. 左叶子之和(Easy)
题目链接DFSclass Solution: def solve(self , xianxu , zhongxu ): # write code here def build_tree(xianxu, zhongxu): if not xianxu: return None root = TreeNode(xianxu[0]) idx = zhongxu.ind.原创 2021-04-02 10:57:16 · 118 阅读 · 0 评论 -
最长重复子串(返回最大长度)
## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可# # @param a string字符串 待计算字符串# @return int整型#class Solution: def solve(self , a ): # write code here n = len(a) # 从最大可能长度开始尝试,是否存在重复子串,依次减一 for length in range(n//2,.原创 2021-04-02 10:16:11 · 219 阅读 · 1 评论 -
最大公约数
# 求出a、b的最大公约数。# @param a int # @param b int # @return int#class Solution: # 辗转相除法 def gcd(self , a , b ): # write code here while b != 0: a, b = b, a % b return a # 更相减损术 def gcd(self , a , b ).原创 2021-04-02 10:10:11 · 74 阅读 · 0 评论 -
704. 二分查找 / 二分查找 II
class Solution: def search(self , nums , target ): # write code here if not nums: return -1 i, j = 0, len(nums)-1 while i < j: mid = (i+j) // 2 if nums[mid] < target: i = .原创 2021-04-01 19:57:31 · 194 阅读 · 0 评论 -
143. 重排链表(链表的首尾交错重排)(Medium)
# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reorderList(self , head ): # write code here if not head or not head.next: return # 快慢指针寻找中间节点 .原创 2021-04-01 10:49:39 · 128 阅读 · 0 评论 -
LFU缓存
# 结构中每个key维护一个被调用次数的数值,以及时间from collections import OrderedDict, defaultdictclass Solution: def LFU(self , operators , k ): # write code here self.k = k self.kv = {} # {key: [val, seq]} self.seq2key = defaultdict(lam..原创 2021-04-01 10:30:04 · 96 阅读 · 0 评论 -
93. 数字字符串转化成IP地址(Medium)
class Solution: def restoreIpAddresses(self , s ): # write code here def dfs(start, cnt): # cnt表示剩余ip段的数量,一共有4段 # 若无剩余i段 and 已经达到字符串s的长度 if cnt == 0 and start == len(s): total.append(.原创 2021-04-01 00:40:03 · 228 阅读 · 1 评论 -
数组中未出现的最小正整数
## return the min number# @param arr int整型一维数组 the array# @return int整型#class Solution: # 哈希表 def minNumberdisappered(self , arr ): # write code here for i in range(len(arr) + 1): if i + 1 not in arr: .原创 2021-03-31 10:58:13 · 101 阅读 · 0 评论 -
在两个长度相等的排序数组中找到上中位数
# find median in two sorted array# @param arr1 int整型一维数组 the array1# @param arr2 int整型一维数组 the array2# @return int整型#class Solution: def findMedianinTwoSortedAray(self , arr1 , arr2 ): # write code here if not arr1 or not arr2: r..原创 2021-03-31 00:26:02 · 115 阅读 · 0 评论 -
将十进制数转换为 N 进制
# 进制转换# @param M int整型 给定整数# @param N int整型 转换到的进制# @return string字符串#class Solution: def solve(self , M , N ): # write code here res = "" base = "0123456789ABCDEF" neg = False if M < 0: # 若M为负数.原创 2021-03-30 22:59:09 · 66 阅读 · 0 评论 -
【LCStr】最长公共子串 / 【LCSeq】最长公共子序列 / 1035.【数组版本】不相交的线(Medium,=最长公共子序列)
最长公共子串# longest common substring# @param str1 string字符串 the string# @param str2 string字符串 the string# @return string字符串#class Solution: # 遍历版本,可返回子串 及 长度 def LCS(self , str1 , str2 ): # 保证str1为短的一个字符串 if len(str2) < len(str1).原创 2021-03-28 21:34:03 · 156 阅读 · 0 评论 -
判断二叉搜索树与完全二叉树
原创 2021-03-15 22:36:08 · 117 阅读 · 0 评论 -
1-N缺两个数
【题目引用】原创 2021-03-15 22:00:33 · 198 阅读 · 0 评论 -
大小写字母左右移动
原创 2021-03-14 16:09:00 · 180 阅读 · 0 评论 -
146. LRU 缓存机制(Medium)
题目链接## lru design# @param operators int整型二维数组 the ops# @param k int整型 the k# @return int整型一维数组#class Solution: def __init__(self, k): self.k = k self.keys = [] self.dct = {} self.res = [] de.原创 2021-03-09 10:49:28 · 129 阅读 · 0 评论 -
25. 链表中的节点每 K 个一组翻转(Hard)
题目链接# class ListNode:# def __init__(self, x):# self.val = x# self.next = None## # @param head ListNode类 # @param k int整型 # @return ListNode类#class Solution: def reverseKGroup(self , head , k ): # write code here.原创 2021-03-08 15:04:43 · 135 阅读 · 0 评论 -
和为 S 的最短【连续】正整数数组
### 自行输入测试样例,以及结果打印!n, l = map(int, input().split())i = lwhile i <= 100: a = (2*n - i*(i-1)) / (2*i) if a == int(a): for _ in range(i-1): print(int(a), end=' ') a += 1 print(int(a)) break i.原创 2021-03-06 21:18:17 · 113 阅读 · 1 评论