思路: 单调栈计算出每个数字的“管辖范围”,再对每个“管辖范围”单独计算并求和。 实现: 1 class Solution { 2 public: 3 int totalStrength(vector<int>& a) { 4 int n=a.size(); 5 vector<int>left,right; 6 stack<int>st; 7 st.pus
题目: 给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。 示例 1: 输入: ex
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { th
题意 给定一个 \(1\) 到 \(N\) 的排列 \(P\),求 dfs 序为 \(P\) 且以 \(1\) 为根的有根树的数量(答案模 \(998244353\)) 注意对于有多个子结点的结点,按编号从小到大遍历子结点。 \(2 \leq N \leq 500\) 思路 区间 dp。 考虑设 \(dp[l][r]\) 为以 \(P_l\) 到 \(P_r\) 组成,dfs 序为 \([
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 Step 1: 找中点,把链表断成前后2部分 Step 2: 后半部分reverse Step 3: 同步遍历,把后半部分结点插入到前半部分 2、代码实现 package Q0199.Q0143ReorderList; import DataStructure.ListNode; public class Solution { /
Problem: 题目描述 给定 \(n\) 个正整数 \(a_i\) ,求它们在模 \(p\) 意义下的乘法逆元。 由于输出太多不好,所以将会给定常数 \(k\),你要输出的答案为: \[\sum\limits_{i=1}^n\frac{k^i}{a_i} \]答案对 \(p\) 取模。 输入格式 第一行三个正整数 \(n,p,k\),意义如题目描述。 第二行 \(n\)
题面 需要动态维护一个点集的极小联通子图边权和。可以发现,将点集 \(\{a_i\}\) 中的点按照 dfs 序从小到大排序之后,\(dist(a_1,a_2)+dist(a_2,a_3)+\ldots+dist(a_{k-1},a_k)+dist(a_k,a_1)\) 恰好等于我们要维护的那个边权和的两倍。所以就开一个 set,在加入和删除的时候加上或删
虽然过了,但是还是不是很清楚,中序遍历,访问每个非空节点时,将左指针置空,pre记录每个父节点,父节点的right置为当前节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :
django内置信号 一 信号简介 Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。用于在框架执行操作时解
C. Binary String https://codeforces.ml/contest/1680/problem/C 题意 给你一个01字符串 可以选择再最前面和最后面删除若干个0或1 然后取剩余的0的个数和删去的个数中较大的那个数作为答案 求最小答案 思路 二分 + 双指针 也可以直接双指针 二分答案 首先预处理计算出01串中1的
//注意这个ListNode类需要写在solution外面,要不然main里没法使用。而且main中类的新建要用 //自己写的: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 //第一种思路的时候出错了 直接用l.next和l.next.next导致都混乱了 以后链
#456. 选数 给定$n$个正整数$a_1, a_2, \dots, a_n$ 。 要求从其中选出若干数字, 使得这些数字的和$\bmod n = 0$ (对于每个下标最多只能选择一次)。 输入格式 第一行一个数字$n$, 表示数字个数。 接下来一行 $n$ 个整数 $a_1, a_2, \dots, a_n$ , 表示这$n$个数。 输出格式 第
Educational Codeforces Round 128 C. Binary String 题意:每次可以从一个01串的两头删除0或者1,求最后留在串中的0的数量和删除的1的数量最大值最小是多少 做法:我们枚举从一端删除1的数量,那么其实你可以发现随着另一端删除1的数量增加,答案会随着变小到最小然后再变大,就类似二次函数
First One 给出n组数,下标从1到n,求一个表达式\(\sum_{i=1}^{n}\sum_{j=i}^{n}(⌊log_2S(i,j)⌋+1)×(i+j)\) 函数\(s(i, j)\)指的是区间\([i,j]\)的和 尺取法 这题的难点在于 如何发现他是尺取 首先我们的第一反应就是暴力,然后暴力会超时 接着观察公式有两个项,如果是通过第二个
题目链接: https://leetcode.cn/problems/reverse-linked-list/ 笔记 想法 凡是涉及链表的题,最好画图后再做 本题是实现单链表的反转,比较简单。 要实现链表反转,我们可以将目的分解成 修改每一个节点的指针指向 将原本的首节点指向 Null ,原本的尾节点不再指向Null,而是指向上一个节
Ford 算法 求最短路径 先构建邻接表数组和初始化邻接关系 int v1[maxn],v2[maxn],w[maxn];//记录起点终点和权值 for(int i=1;i<=m;++i) { cin>>u>>v>>val; v1[i]=u; v2[i]=v; w[i]=val; } 构建一维数组d,记录距离出发点
How to use Pre-trained Word Embeddings in PyTorch NPL之如何使用Glove--词向量转化
title: 0和1个数相同的子数组
title: 和为k的子数组
思路:三个指针实现原地反转,不懂的看代码 点击查看代码 #include <iostream> using namespace std; //博客园有时候不常看消息,有相关代码疑问的可以联系我,请注明来意,wx:A470216705 struct Node { Node* next; int value; }; Node* linkList_inversion(Node* head) {
题目表述 设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例 1: 输入: root = [2,1,3], p = 1 2 / 1 3 输出: 2 解题思路 只有两种情况 p没有右子树 p有右子树 如果有右子树的话,那么只需要直接根
模型 代码 post_war.m % 战后 function dx=post_war(t,x) dx=zeros(2,1); dx(1)=x(1)*(0.9-0.1*x(2)); dx(2)=x(2)*(-0.6+0.02*x(1)); end pre_war.m % սǰ function dx=pre_war(t,x) dx=zeros(2,1); dx(1)=x(1)*(0.7-0.1*x(2)); dx(2)=x(2)*(-0.8
7.2:链表删除给定值 1 public static Node removeValue(Node head, int num) { 2 // head来到第一个不需要删的位置 3 while (head != null) { 4 if (head.value != num) { 5 break; 6 } 7 head =
不难看出这是一道差分约束的题目。 但是如果想按照通常的题目那样去建边的话,就会发现这句话——相邻两站的距离至少是1公里——建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了。 这时我们就需要使用断环为链的技巧。 可以设\(len\)为地铁环线总长 那么就需要把\(a
题目链接 操作一就是很简单的单点修改。操作二求最大子段和是本题的重点。 最大子段和可能分布在这个节点的左儿子的最大子段和,要么是右儿子的最大子段和,要么是横跨两部分(左儿子的后缀加右儿子的前缀)。而当前节点的最大前缀是\(\max \{pre[ls], sum[ls] + pre[rs]\}\),最