avatar
文章
169
标签
38
分类
4

首页
归档
标签
分类
面试资料
首页
归档
标签
分类

面试资料

有序数组的平方
发表于2024-12-25|算法leetcode
有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 1234输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100] 示例 2: 12输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121] 提示: 1 <= nums.length <= 104 -104 <= nums[i] <= 104 nums 已按 非递减顺序 排序 进阶: 请你设计时间复杂度为 O(n) 的算法解决本问题 最简单的做法直接计算平方后排序 123456789class Solution { public int[] sortedSquares(int[] nums) { for(int i=0;i<nums.length;i++){ nums[i]=nums[i ...
leetcode-36-有效的数独
发表于2024-09-17|算法leetcode
有效的数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注意: 一个有效的数独(部分已被填充)不一定是可解的。 只需要根据以上规则,验证已经填入的数字是否有效即可。 空白格用 '.' 表示。 示例 1: 1234567891011输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","." ...
acwing-模拟栈
发表于2024-04-28|算法acwing
模拟栈实现一个栈,栈初始为空,支持四种操作: push x – 向栈顶插入一个数 x𝑥; pop – 从栈顶弹出一个数; empty – 判断栈是否为空; query – 查询栈顶元素。 现在要对栈进行 𝑀 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。 输入格式第一行包含整数 𝑀,表示操作次数。 接下来 𝑀 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。 输出格式对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。 其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。 数据范围1≤M≤100000,1≤x≤10^9所有操作保证合法。 输入样例:123456789101110push 5querypush 6popquerypopemptypush 4queryempty 输出样例:1234555YES4NO 用数组模拟栈 12345678910111213141516171819202122232425262728293 ...
acwing-双链表
发表于2024-04-27|算法acwing
双链表实现一个双链表,双链表初始为空,支持 5 种操作: 在最左侧插入一个数; 在最右侧插入一个数; 将第𝑘 个插入的数删除; 在第 𝑘 个插入的数左侧插入一个数; 在第 𝑘 个插入的数右侧插入一个数 现在要对该链表进行 𝑀 次操作,进行完所有操作后,从左到右输出整个链表。 注意:题目中第 𝑘 个插入的数并不是指当前链表的第 𝑘 个数。例如操作过程中一共插入了 𝑛 个数,则按照插入的时间顺序,这 𝑛 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 𝑛 个插入的数。 输入格式第一行包含整数 𝑀,表示操作次数。 接下来 𝑀 行,每行包含一个操作命令,操作命令可能为以下几种: L x,表示在链表的最左端插入数 𝑥。 R x,表示在链表的最右端插入数 𝑥。 D k,表示将第 𝑘 个插入的数删除。 IL k x,表示在第 𝑘 个插入的数左侧插入一个数。 IR k x,表示在第 𝑘 个插入的数右侧插入一个数。 输出格式共一行,将整个链表从左到右输出。 数据范围1≤M≤100000所有操作保证合法。 输入样例:123456789101110R 7D ...
acwing-单链表
发表于2024-04-23|算法acwing
单链表实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 k 个插入的数后面的一个数; 在第 k 个插入的数后插入一个数。 现在要对该链表进行 𝑀 次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第 𝑘 个插入的数并不是指当前链表的第 𝑘 个数。例如操作过程中一共插入了 𝑛 个数,则按照插入的时间顺序,这 𝑛 个数依次为:第 11 个插入的数,第 22 个插入的数,…第 𝑛 个插入的数。 输入格式第一行包含整数 𝑀,表示操作次数。 接下来𝑀 行,每行包含一个操作命令,操作命令可能为以下几种: H x,表示向链表头插入一个数 𝑥。 D k,表示删除第 𝑘 个插入的数后面的数(当 𝑘 为 0 时,表示删除头结点)。 I k x,表示在第 𝑘 个插入的数后面插入一个数𝑥(此操作中 k𝑘 均大于 0)。 输出格式共一行,将整个链表从头到尾输出。 数据范围1≤M≤100000所有操作保证合法。 输入样例:123456789101110H 9I 1 1D 1D 0H 6I 3 6I 4 5I 4 5I 3 4D 6 输出样 ...
acwing-区间合并
发表于2024-04-19|算法acwing
区间合并给定 n 个区间 [li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式第一行包含整数 n。 接下来 n 行,每行包含两个整数 l 和 r。 输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。 数据范围1≤n≤100000,−10^9≤li≤ri≤10^9 输入样例:12345651 22 45 67 87 9 输出样例:13 将区间的左右端点存储起来,将左端点排序后分类讨论。 12345678910111213141516171819202122232425262728293031323334353637#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<pair<int,int>> a,res;int main(){ int n; cin&g ...
acwing-区间和
发表于2024-04-18|算法acwing
区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。 现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。 接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r][�,�] 之间的所有数的和。 输入格式第一行包含两个整数 n 和 m。 接下来 n 行,每行包含两个整数 x 和 c。 再接下来 m 行,每行包含两个整数 l 和 r。 输出格式共 m 行,每行输出一个询问中所求的区间内数字和。 数据范围−10^9≤x≤10^9,1≤n,m≤10^5,−10^9≤l≤r≤10^9,−10000≤c≤10000 输入样例:12345673 31 23 67 51 34 67 8 输出样例:123805 数轴的长度是10的9次方级别,需要进增加和查询的点的数量是10的5次方级别。这些点在数轴上的分布非常稀疏,如果直接使用前缀和会超时。 考虑把这些稀疏的点通过一个映射关系映射到一块连续的区域,操作次数就会变为10的5次方级别,再使用前缀和就可以了。 把所有需要进行增加和查询的点记录到all数组里,对数组进行排序。 用二分找到这个点 ...
acwing-二进制中1的个数
发表于2024-04-12|算法acwing
二进制中1的个数给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 11 的个数。 输入格式第一行包含整数 n。 第二行包含 n 个整数,表示整个数列。 输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 11 的个数。 数据范围1≤n≤1000001,0≤数列中元素的值≤1090≤数列中元素的值≤109 输入样例:1251 2 3 4 5 输出样例:11 1 2 1 2 将十进制数与1后右移1位直到十进制数为0可以实现十进制转二进制。 123456789101112131415161718192021#include<iostream>#include<vector>using namespace std;int main(){ int n; cin>>n; vector<int> a(n+1); vector<int> res; for(int i=0;i<n;i++) cin>>a[i]; for(i ...
acwing-判断子序列
发表于2024-04-12|算法acwing
判断子序列给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。 请你判断 a 序列是否为 b 序列的子序列。 子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。 输入格式第一行包含两个整数 n,m。 第二行包含 n个整数,表示 a1,a2,…,an。 第三行包含 m 个整数,表示 b1,b2,…,bm。 输出格式如果 a 序列是 b 序列的子序列,输出一行 Yes。 否则,输出 No。 数据范围1≤n≤m≤105,−109≤ai,bi≤109 输入样例:1233 51 3 51 2 3 4 5 输出样例:1Yes 设置两个指针i,j分别指向a,b开头,如果对应元素相等,i++否则j++.循环结束后判断i的位置确定是否满足 12345678910111213141516171819202122/*while循环版*/#include<iostream>#include<vector>using namespace s ...
acwing-数组元素的目标和
发表于2024-04-11|算法leetcode
数组元素的目标和给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。 数组下标从 00 开始。 请你求出满足 A[i]+B[j]=x=的数对 (i,j)。 数据保证有唯一解。 输入格式第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。 第二行包含 n 个整数,表示数组 A。 第三行包含 m个整数,表示数组 B。 输出格式共一行,包含两个整数 i 和 j。 数据范围数组长度不超过 105105。同一数组内元素各不相同。1≤数组元素≤1091≤数组元素≤109 输入样例:1234 5 61 2 4 73 4 6 8 9 输出样例:11 1 方法一用哈希表记录x-a[i]的下标,如果b中元素在哈希表中出现过说明b[j]+a[i]==x。题目保证有唯一解,输出完直接返回。 1234567891011121314151617181920212223#include<iostream>#include<vector>#include<unordered_map>using namespace std ...
1…111213…17
avatar
范小勤
文章
169
标签
38
分类
4
Follow Me
公告
This is my Blog
最新文章
验证二叉搜索树2025-02-26
寻找重复数2025-02-17
下一个排列2025-02-17
颜色分类2025-02-16
只出现一次的数字2025-02-16
分类
  • 八股文11
  • 算法155
    • acwing22
    • leetcode133
标签
区间和 Trie 二叉树 模拟 完全背包 DFS 位运算 BFS 链表 优先队列 二叉搜索树 拓扑排序 哈希 01背包 栈 双向链表 差分 图论 摩尔投票 双指针 贪心 单调队列 桶排序 kmp 滑动窗口 并查集 前缀积 矩阵 递归 归并排序 单调栈 高精度 记忆化搜索 集合 二分 前缀和 动态规划 快速排序
归档
  • 二月 202543
  • 一月 202554
  • 十二月 202414
  • 九月 20241
  • 四月 202418
  • 三月 202419
  • 二月 202420
网站资讯
文章数目 :
169
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By 范小勤
框架 Hexo|主题 Butterfly