leetcode contest weekly 351

LeetCode/分隔数组以得到最大和

给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。 分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元素最大和 ###一. 动态规划(正向递推) 分析:数组的最大和是和子数组最大和关联的,对子问题的优化可以带来对整个问 ......
数组 LeetCode

扎实打牢数据结构算法根基,从此不怕算法面试系列之008 week01 02-08 通过常见算法,对常见的时间复杂度做梳理

#1、线性查找法的复杂度 public static <E> int search(E [] data,E target){ for (int i = 0; i < data.length; i++) if (data[i].equals(target)) return i; return -1; ......
算法 常见 复杂度 数据结构 根基

35. 搜索插入位置(leetcode)

https://leetcode.cn/problems/search-insert-position/ 简单二分,这里可以判断return,相当于剪枝 class Solution { public: int searchInsert(vector<int>& nums, int target) ......
leetcode 位置 35

704. 二分查找(leetcode)

https://leetcode.cn/problems/binary-search/ 简单二分 class Solution { public: int search(vector<int>& nums, int target) { int l=0,r=nums.size()-1; while(l ......
leetcode 704

AtCoder Beginner Contest 298

A - Job Interview #include <bits/stdc++.h> using namespace std; int main(){ int n; string s; cin >> n >> s; if( s.find("x") != -1 ){ printf("No\n"); } ......
Beginner AtCoder Contest 298

Atcoder Regular Contest 118 E - Avoid Permutations(容斥+DP)

挺套路的 DP。 第一步是显然的:转换贡献体,DP 一条从 $(0,0)$ 到 $(n+1,n+1)$ 的路径,然后计算有多少个排列满足这条路径不经过任何一个 $(i,p_i)$。 正着统计肯定不好求,考虑容斥。即我们钦定一些路径上的点,满足这些点必须对应某个 $(i,p_i)$,然后计算有多少个 ......
Permutations Atcoder Regular Contest Avoid

abc292[AtCoder Beginner Contest 292] 题解

写点题目转换下心情吧 A-CAPS LOCK 大水题 B-Yellow and Red Card 大水题 C-Four Variables 给定一个数$N$,问有多少个有序正数数组$(A,B,C,D)$,满足$A\times B+C\times D=N$。 这题荒芜的大脑拒绝思考,看着复杂度不超,写 ......
题解 292 Beginner AtCoder Contest

【优先队列】LeetCode 378. 有序矩阵中第 K 小的元素

题目链接 378. 有序矩阵中第 K 小的元素 思路 因为矩阵的每行和每列元素均按升序排序,所以我们可以打破传统思路 代码 class Solution { public int kthSmallest(int[][] matrix, int k) { PriorityQueue<int[]> pr ......
队列 矩阵 LeetCode 元素 378

leetCode 206 反转链表(头插法+ 两种递归)

递归 # 优先处理尾部的链表,此时需要返回子链表的头节点和尾节点 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # sel ......
leetCode 206

【DP】LeetCode 97. 交错字符串

题目链接 97. 交错字符串 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[i] 和 nums2[j] 为 ......
字符串 字符 LeetCode 97

【LeetCode动态规划#08】完全背包问题实战与分析(零钱兑换II)

零钱兑换II 力扣题目链接(opens new window) 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount = 5, coins = [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 5 ......
零钱 背包 实战 LeetCode 动态

【DP】LeetCode 题号.题目

题目链接 377. 组合总和 Ⅳ 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[i] 和 nums2[j] ......
题号 LeetCode 题目

扎实打牢数据结构算法根基,从此不怕算法面试系列之007 week01 02-07 简单的复杂度分析

#1、复杂度分析 复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。 很多童鞋看过《算法导论》,这本书的内容很多很强调算法导论。 但是实际上,对于普通程序员来说,不需要过度强调理论化的内容。因为工作中更多面对的是实际的 软件工程,工程化的工作不需要面对太多 ......
算法 复杂度 数据结构 根基 结构

leetcode刷题随笔(2)

42.收集雨水(Trapping Rain Water) 方法一:利用双指针交叉循环求解,时间复杂度O(n) //接雨水 int trap(vector<int>& height) { int i=0,j=height.size()-1; int left_max=0,right_max=0; in ......
leetcode 随笔

LeetCode Top100: 反转链表 (python)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [ ......
LeetCode python 100 Top

Contest 23-04-18

#D.糖果镇 思路 $m=3$时整个路径有两个拐点,分别是$m=1 \to m=2,m=2 \to m=3$ 设拐点$1$在第$i$列,拐点$2$在第$j$列,则路径上的数字总和为$(front[1][i])+(front[2][j]-front[2][i-1])+(back[j])$($front ......
Contest 23 04 18

LeetCode Top100: 翻转二叉树(python)

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root = [2,1,3] 输出:[2,3,1] 示例 3: 输入:root = [] 输出:[] 提示: ......
LeetCode python 100 Top

LeetCode Top 100: 二叉树的直径 (python)

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之 ......
直径 LeetCode python 100 Top

4月18日leetcode二叉树几种遍历方式的非递归和递归

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完成递归遍历。 解题思路, ......
leetcode 方式

leetcode_打卡7

leetcode_打卡7 题目:238. 除自身以外数组的乘积 思路: 代码: class Solution { public int[] productExceptSelf(int[] nums) { int n=nums.length; int sum=1,result=1; int j=0; ......
leetcode

LeetCode:Search Algorithm

LeetCode:Search Algorithm 1\First unique char Algorithm Design 利用字符数量的有限性,通过数组来映射(避免Hash_map的高复杂度) 注意数组声明为int A[26]而不是char A[26]; if(s=="") return ' ' ......
Algorithm LeetCode Search

LeetCode Top100: 合并二叉树(python)

给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的 ......
LeetCode python 100 Top

leetcode-206反转链表

反转链表 方法一:迭代法 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListN ......
leetcode 206

leetcode刷题随笔(1)

11.盛水最多的容器 暴力求解超时问题的解决 int maxArea(vector<int>& height) { int max=0; int n=height.size(); int num; int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(i<j ......
leetcode 随笔

AtCoder Regular Contest 109 E 1D Reversi Builder

洛谷传送门 AtCoder 传送门 考虑固定 $s$ 和每个格子的颜色,最终有多少个石子被染黑。 结论: 任何时刻只有不多于两个极大同色连通块。 证明: 设 $[x,y]$ 为当前的黑连通块,$[y+1,z]$ 为白连通块。如果下一次染 $x-1$,若 $x-1$ 为白,则 $[x-1,z]$ 都被 ......
AtCoder Regular Contest Builder Reversi

AtCoder Regular Contest 109 D L

洛谷传送门 AtCoder 传送门 这种题根本做不出来…… 考虑一个 L 形怎么方便地表示出来。可以发现对于组成 L 形的三个点 $(x_1,y_1),(x_2,y_2),(x_3,y_3)$,只要知道 $x = x_1 + x_2 + x_3$ 和 $y = y_1 + y_2 + y_3$,就能 ......
AtCoder Regular Contest 109

【DP】LeetCode 72. 编辑距离

题目链接 72. 编辑距离 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[i] 和 nums2[j] 为结 ......
LeetCode 72

【DP】LeetCode 139. 单词拆分

题目链接 139. 单词拆分 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[i] 和 nums2[j] 为 ......
单词 LeetCode 139

【LeetCode剑指offer 03】合并两个/K个排序链表

合并两个排序链表 https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1 ......
LeetCode 两个 offer

Leetcode 1026. 节点与其祖先之间的最大差值

题目: 给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。 (如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先) 难度:中等 示例1: 输入 ......
差值 节点 祖先 Leetcode 之间