数列 前缀 区间 算法

10.15算法

最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元 ......
算法 10.15 10 15

一个vuepress配置问题,引发的js递归算法思考

前言 这两天在尝试用语雀+ vuepress + github 搭建个人博客。 小破站地址 :王天的 web 进阶之路 语雀作为编辑器,发布文档推送 github,再自动打包部署,大概流程如下。 问题 我使用的elog插件批量导出语雀文档。elog采用的配置是所有文章平铺导出,没有按照语雀知识库目录 ......
算法 vuepress 问题

一.排序算法---并归排序

一.并归排序(自定义实现) merge 函数:这个函数用于将两个已排序的子数组合并为一个更大的已排序数组。它包括创建临时数组 L 和 R 来存储左半部分和右半部分的元素,然后比较这些元素并将它们按升序合并到原始数组 arr 中。 mergeSort 函数:这个函数是归并排序的主要函数。它采用递归的方 ......
算法

二阶前缀和和二阶差分

马上就要csps 了还啥也不会,真就是酸菜鱼了。 定义 二阶差分就是在差分数组的基础上再做一次差分。 举个很板的栗子就是对一个序列进行一个等差数列式的一个减法,这个时候我们可以通过二阶差分,在 \(O(1)\) 的复杂度进行修改,之后就是 \(O(n)\) 的二维前缀和,就可以维护出来我们的一个序列 ......
前缀

三道关于数列的不等式

第一道:证明\(\sum_{i=2}^n (\frac{1}{2n})^n<\frac{1}{\sqrt{e}(e-1)}\) \((\frac{1}{2n})^n=e^{n\ln \frac{1}{2n}}<e^{n(\frac{1}{2n})-1}=e^{\frac{1}{2}-n}\) \(\ ......
不等式 数列

力扣第 115 场双周赛(完全背包,多重背包,前缀和,最长上升子序列模型)

模拟题,记录一个k值,表示上一次记录到哪里了。若遇到prev则移动k;否则重置k; class Solution { public: vector<int> lastVisitedIntegers(vector<string>& words) { vector<int> nums, res; int ......
背包 前缀 序列 模型 115

【算法题】多数元素

🔗题目链接 ✈题目描述: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 ⌊ n/2 ⌋表示n/2结果向下取整。 🚆数据范围: n == nums.length 1 ......
算法 元素

【算法题】轮转数组

🔗题目链接 🎇题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 🎇数据范围: 1 <= nums.length <= \(10^5\) \(-2^{31}\) <= nums[i] <= \(2^{31}\) - 1 0 <= k <= \(10 ......
数组 算法

【算法题】跳跃游戏

题目链接 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 1 <= nums.length <= \(10^4\) 0 <= nums[i] ......
算法

【算法】归并排序

归并排序的基本思想是什么? 归并排序采用分治法(Divide and Conquer),将待排序的数组分成若干个子数组再对子数组进行排序,最后将已排序的子数组合并成一个大的有序数组。 下面是归并排序的基本步骤: 分解-Divider:将待排序的数组按照中间位置分成两个子数组,再将每个子数组按照相同的 ......
算法

【算法题】257

257. 二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 树中节点的数目在范围 [1, 100] 内 -100 <= Node.val <= 100 这是一道常规 DFS 题, /** * Definitio ......
算法 257

【算法题】跳跃游戏Ⅱ

题目链接 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i] i + j < n 返 ......
算法

【算法题】移除元素

题目来源 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 0 <= nums.leng ......
算法 元素

【算法题】合并两个有序数组

💎题目来源 💎题目描述: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返 ......
数组 算法 两个

【算法题】买卖股票的最佳时机

题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润, ......
算法 时机 股票

【算法】质数的判断与筛法

质数定义 不能被 \(2,3,...,n-1\) 整除的自然数 \(n\) 称之为素数,或质数。 判断单个质数 isPrime 那是不是一定要判断从 2 到 n-1 每个数能否整除 n 呢? 答案是不需要。 如果 k 整除 n,那么 n/k 也整除 n,它两位于 \(\sqrt n\) 两侧,判断了 ......
质数 算法

【算法题】买卖股票的最佳时机Ⅱ

题目链接 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。 1 <= prices.length ......
算法 时机 股票

【算法题】删除有序数组中的重复项

题目链接 思路1:使用set。 /** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(nums) { const uniqueSet=new Set(); for(let i=0;i<nu ......
数组 算法

【算法题】删除有序数组中的重复项Ⅱ

题目来源。 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路1:移动元素法。从后遍历数组,计数元素重复次数,当遇到不重 ......
数组 算法

【算法题】1163.按字典序排在最后的子串

题目链接 给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。 1 <= s.length <= 4 * \(10^5\) s仅含有小写英文字符。 最关键的是处理时间复杂度,怎么让他小于\(O(n^2)\)。 双指针法: /** * @param {string} s * ......
算法 字典 1163

【算法题】 O(1) 时间插入、删除和获取随机元素 JavaScript

题目链接 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。 bool remove(int val) 当 ......
算法 JavaScript 元素 时间

算法题解——买卖股票的最佳时机

解题思路 先考虑最简单的「暴力遍历」,即枚举出所有情况,并从中选择最大利润。设数组 prices 的长度为n,由于只能先买入后卖出,因此第 1 天买可在未来n−1天卖出,第 2 天买可在未来n - 2天卖出……以此类推,共有 \[(n - 1) + (n - 2) + \cdots + 0 = \f ......
题解 算法 时机 股票

14.最长公共前缀

1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","racecar","car"] 输出:"" 解 ......
前缀 14

【算法笔记】 数位dp (例题是 [SCOI2009] windy 数)

数位dp 引入 数位 :是指把一个数字按位数一位一位地拆开,关注它每一位上的数字。如果拆的是十进制数,那么每一位数字都是 0~9,其他进制可类比十进制,就比如 链接: [SCOI2009] windy 数的二进制同理。 常见特征 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转 ......
例题 数位 算法 笔记 windy

一.排序算法---快速排序

1.快速排序 1)快速排序(自定义实现) Quick_Sort 函数:它采用一个整数数组 arr,以及两个索引 begin 和 end,表示排序范围的起始和结束位置。如果 begin 大于或等于 end,则数组无需排序,因此直接返回。否则,它选择一个基准元素(通常是数组的第一个元素),然后通过比较和 ......
算法

Java 深度优先搜索 and 广度优先搜索的算法原理和代码展示

111. 二叉树的最小深度 题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 方法1:深度优先搜索 原理:深度优先搜索(Depth First Search)是一种遍历图的算法,它从图中的某个顶点出发,沿着一条路径不 ......
广度 算法 深度 原理 代码

算法0506 对数器 二分搜索

对数器 非常重要的自我验证代码正确性的方法 在面试时或机试时写算法题,没有测试用例或者测试用例太少,导致巨大的数据量无法进行测试时。需要自己写测试用例数据时可以使用对数器。 ......
对数 算法 0506

算法讲解0304

1、打印二进制 void print(int num) { for(int i = 31; i >= 0; i--) if((num &(1 << i)) == 0) cin>>0; else cin >> 1; } 2、选择排序 void selectionSort(int arry[]) { i ......
算法 0304

C++基本算法大致总结

排序算法: 快速排序(Quick Sort):使用std::sort或自定义实现。 归并排序(Merge Sort):自定义实现或使用std::stable_sort。 堆排序(Heap Sort):自定义实现或使用std::make_heap和std::sort_heap。 搜索算法: 二分查找( ......
算法

高精度算法

1.高精度加法 这个比较简单一些,主要是考虑满10进位的问题,直接写代码就可以。(若数字很大的话,不太好运算,所以将数字转化成字符串的形式输入) #include <iostream> using namespace std; const int N = 100010; int A[N], B[N] ......
高精 高精度 算法