算法练习
文章平均质量分 64
1.收集考研复试常见题目,希望可以进入理想院校。
2.竞赛编程练习:2019年3月(大二下)第十届蓝桥杯山东赛区一等奖;同年5月参加总决赛获得国家三等奖。
3.大厂算法练习
小果果学长
手比脚笨,不停探寻.
展开
-
lc23. 合并K个升序链表
合并K个升序链表,每个链表的长度不一致。可以利用优先队列的性质进行编程。请你将所有链表合并到一个升序链表中,返回合并后的链表。这是一道面试算法题,好久没有练习。给你一个链表数组,每个链表都已经按升序排列。首先定义优先队列的排序方式,根据节点进行排序。核心代码:每次弹出最小的元素,依次往后排序。遍历整个优先队列,直到队列为空。原创 2023-03-11 12:52:09 · 429 阅读 · 0 评论 -
LC169. 多数元素
力扣题目描述给定一个大小为 n 的数组nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:nums = [3,2,3]输出:3示例2:输入:nums = [2,2,1,1,1,2,2]输出:2提示:n == nums.length1 <= n <= 5 * 104-109 <= nums[i] <= 109进阶:...原创 2022-05-11 23:53:26 · 501 阅读 · 0 评论 -
JZ79 判断是不是平衡二叉树(C++|后序遍历)
前言描述输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围:n \le 100n≤100,树上节点的val值满足 0 \le n \le 10000≤n≤100原创 2022-04-25 11:50:26 · 161 阅读 · 0 评论 -
leetcode146. LRU 缓存(C++|数据结构|双链表|哈希表)
力扣题目描述请你设计并实现一个满足LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value)如果关键字key 已经存在,则变更其数据值value ;如果不存在,则向缓存中插入该组key-value ...原创 2022-03-16 00:19:30 · 428 阅读 · 0 评论 -
LC230. 二叉搜索树中第K小的元素(C++|中序遍历|优化|面试)
题目描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1示例 2:输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3提示:树中的节点数为 n 。1 <= k <= n <= 1040 <= Node.val <= 104...原创 2022-03-15 19:14:17 · 127 阅读 · 0 评论 -
leetcode79. 单词搜索(C++|递归|深搜|技巧|天坑)
https://leetcode-cn.com/problems/word-search题目描述给定一个m x n 二维字符网格board 和一个字符串单词word 。如果word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [["A","B","C","E"],["S","F","C","...原创 2022-03-14 23:47:37 · 156 阅读 · 0 评论 -
lc240. 搜索二维矩阵 II(C++|二分|思维|面试)
力扣题目描述编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2...原创 2022-03-12 21:24:13 · 147 阅读 · 0 评论 -
JZ9. 用两个栈实现队列(C++|模拟)
用两个栈实现队列_牛客题霸_牛客网描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。数据范围:n\le1000n≤1000要求:存储n个元素的空间复杂度为O(n)O(n),插入与删除的时间复杂度都是O(1)O(1)示例1输入:["PSH1","PSH2","POP","POP"]复制返回值:1,2复制...原创 2022-03-12 19:36:29 · 153 阅读 · 0 评论 -
排序算法C++
快速排序#include <iostream>#include <vector>using namespace std;//partiotion算法 int partition(vector<int>&nums,int left,int right){ int pivot=nums[left]; while(left<right){ //从右边找到一个比pivot小的值 while(left<right&&a原创 2022-03-07 18:47:00 · 539 阅读 · 0 评论 -
数学思维1-金字塔
题目链接:金字塔_牛客题霸_牛客网题目描述众所周知,金字塔是一层一层堆砌而成。如下图,金字塔的最顶层有一个点,第二层有三个点,第三层有六个点,以此类推……有一个无限大的金字塔,前nn层一共有多少个点?答案请对10^9+7取模。示例1输入:4复制返回值:20复制说明:前四层的点数量为 1 + 3 + 6 +10 = 20 果果念又是调了很长时间bug的一道题目,一开始看错题目了,第四层怎么也不知道怎么是10,原来是1+2+3+...原创 2022-03-05 21:20:47 · 644 阅读 · 0 评论 -
剑指offer-数值的整数次方
数值的整数次方_牛客题霸_牛客网题目描述描述实现函数 double Power(double base, int exponent),求base的exponent次方。注意:1.保证base和exponent不同时为0。2.不得使用库函数,同时不需要考虑大数问题3.有特殊判题,不用考虑小数点后面0的位数。示例1输入:2.00000,3复制返回值:8.00000复制示例2输入:2.10000,3复制返回值:9.26100原创 2022-03-04 18:13:29 · 524 阅读 · 0 评论 -
机试1-最长子序列(C++|动态规划|标记数组)
题目描述给定一个数组A和一个整数M,求该数组的最长子序列长度,其中子序列满足各个元素之间相互做差可以被M整除。例如:对于数组int A[]={-3,-2,1,0,8,7,1},M=3.那么最长子序列长度为4,其中的元素为-2,1,7,1.其中:N,M<10,0000;A[i]位于[-100,0000,000,100,0000,000]果果念这是昨天晚上的某厂的机试题目, 我当时是暴力求解的,时间复杂度O(N^2),空间复杂度O(1);我觉得肯定可以用动态规划或者其他简单的方法降低时原创 2022-02-27 12:08:28 · 341 阅读 · 0 评论 -
剑指Offer-青蛙跳台阶(C++|动态规划|左移|找规律|思维|斐波那契)
链接:跳台阶__牛客网题目描述1一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。数据范围:1≤n≤40要求:时间复杂度:O(n),空间复杂度: O(1)果果念啦啦啦,我又来了,觉得写博客就像写日记一样,也不会那么隐私了。昨天面试了,呜呜呜,学长说因为本科学历不是211就被卡了,面试表现还行。不过也是存在很多问题的,好好准备呀。这道题目本来是想着昨天做的,但是因为什么原因呢,害,主要是昨天心情比较糟.原创 2022-02-23 22:06:49 · 748 阅读 · 0 评论 -
棋盘覆盖(C++|分治|递归)
题目描述Description棋盘覆盖问题:给定一个大小为2^n2^n个小方格的棋盘,其中有一个位置已经被填充,现在要用一个L型(22个小方格组成的大方格中去掉其中一个小方格)形状去覆盖剩下的小方格。求出覆盖方案,即哪些坐标下的小方格使用同一个L型格子覆盖。注意:坐标从0开始。左上方的第一个格子坐标为(0,0),第一行第二个坐标为(0,1),第二行第一个为(1,0),以此类推。Input输入第一行为测试用例个数,后面每一个用例有两行,第一行为n值和特殊的格子的坐标(用空格隔开),第原创 2022-02-21 21:37:25 · 1121 阅读 · 0 评论 -
剑指 Offer 14-. 剪绳子(C++|贪心|动态规划|大数)
力扣题目描述给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入: 2输出: 1.原创 2022-02-20 16:38:51 · 559 阅读 · 0 评论 -
leetcode-剑指 Offer 03. 数组中重复的数字(C++|数组与矩阵|面试|复杂度分析)
数组中重复的数字_牛客题霸_牛客网力扣题目描述描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1数据范围:0\le n \le 10000 \0≤n≤10000进阶:时间复杂度O(n)\O(n),空间复杂度O(n)\O(n)果果念...原创 2022-02-20 12:18:43 · 318 阅读 · 0 评论 -
leetcode53. 最大子数组和(C++|动态规划)
链接:力扣题目描述给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1] 的和最大,为6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <= nums.length &l...原创 2022-02-19 16:15:51 · 670 阅读 · 0 评论 -
leetcode37. 解数独(C++|回溯)
题目描述编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8...原创 2022-02-18 22:41:01 · 8100 阅读 · 0 评论 -
leetcode51. N 皇后|C++|回溯|递归
题目链接:力扣题目描述n皇后问题 研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的n皇后问题 的解决方案。每一种解法包含一个不同的n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存...原创 2022-02-18 20:22:11 · 382 阅读 · 0 评论 -
leetcode22. 括号生成(C++|回溯|剪枝)
题目链接:力扣题目描述数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8果果念这道题目花了我大概两个多小时,快吐了。代码10分钟左右就写好了,因为和全排列的方式很像,几乎一样,但是我困在哪里了啊?就是一个b..原创 2022-02-14 00:15:10 · 740 阅读 · 0 评论 -
leetcode654. 最大二叉树(C++|递归|单调栈)
链接:https://leetcode-cn.com/problems/maximum-binary-tree/题目描述给定一个不重复的整数数组nums 。最大二叉树可以用下面的算法从nums 递归地构建:创建一个根节点,其值为nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值 右边 的子数组后缀上构建右子树。返回nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5...原创 2022-02-07 22:31:38 · 983 阅读 · 0 评论 -
leetcode106. 从中序与后序遍历序列构造二叉树(C++|二叉树)
链接:力扣题目描述给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例 1:输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例 2:输入:inorder = [-1], postorder = [-1]输出:[-1]提示:...原创 2022-02-03 22:07:24 · 779 阅读 · 0 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树(C++|递归)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/题目描述给定两个整数数组preorder 和 inorder,其中preorder 是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输...原创 2022-02-03 21:05:33 · 284 阅读 · 0 评论 -
leetcode215. 数组中的第K个最大元素(C++|优先队列|堆)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <=..原创 2022-01-31 17:56:51 · 1253 阅读 · 0 评论 -
leetcode21. 合并两个有序链表(C++|双指针)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点...原创 2022-01-31 16:37:42 · 88 阅读 · 0 评论 -
leetcode-304. 二维区域和检索 - 矩阵不可变(C++|前缀和)
链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/题目给定一个二维矩阵 matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1,col1) ,右下角 为 (row2,col2) 。实现 NumMatrix 类:NumMatrix(int[][] matrix)给定整数矩阵 matrix 进行初始化int sumRegion(int row1, int col...原创 2022-01-25 00:59:53 · 410 阅读 · 0 评论 -
leetcode-1541. 平衡括号字符串的最少插入次数
链接:https://leetcode-cn.com/problems/minimum-insertions-to-balance-a-parentheses-string题目给你一个括号字符串s,它只包含字符'(' 和')'。一个括号字符串被称为平衡的当它满足:任何左括号'('必须对应两个连续的右括号'))'。左括号'('必须在对应的连续两个右括号'))'之前。比方说"())","())(())))" 和"(())())))"都是平衡的,")()",...原创 2022-01-24 00:48:52 · 154 阅读 · 0 评论 -
leetcode-1109. 航班预订统计(C++|差分)
链接:https://leetcode-cn.com/problems/corporate-flight-bookings/题目内容这里有n个航班,它们分别从 1 到 n 进行编号。有一份航班预订表bookings ,表中第i条预订记录bookings[i] = [firsti, lasti, seatsi]意味着在从 firsti到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi个座位。请你返回一个长度为 n 的数组answe...原创 2022-01-22 21:05:48 · 214 阅读 · 0 评论 -
leetcode-19. 删除链表的倒数第 N 个结点(C++|快慢指针)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1...原创 2022-01-22 16:57:18 · 720 阅读 · 0 评论 -
leetcode-3. 无重复字符的最长子串
题目来源:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目内容给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度...原创 2022-01-21 23:44:45 · 73 阅读 · 0 评论 -
leetcode-26. 删除有序数组中的重复项
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 num原创 2022-01-21 22:27:39 · 55 阅读 · 0 评论 -
leetcode-34. 在排序数组中查找元素的第一个和最后一个位置(C++|二分|边界问题)
题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例 1:输入:nums = [5,7...原创 2022-01-20 23:15:09 · 5311 阅读 · 0 评论 -
leetcode-239-滑动窗口最大值
题目链接:https://leetcode-cn.com/problems/sliding-window-maximum/题目内容给你一个整数数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值-...原创 2022-01-17 22:08:56 · 108 阅读 · 0 评论 -
Leetcode-862. 和至少为 K 的最短子数组
题目链接:https://leetcode-cn.com/problems/shortest-subarray-with-sum-at-least-k/题目给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1 。子数组是数组中连续的一部分。示例 1:输入:nums = [1], k = 1输出:1示例 2:输入:nums = [1,2], k = 4输出:-1示例 3:原创 2022-01-17 00:36:04 · 4100 阅读 · 0 评论 -
【算法练习】dfs(深搜)数独
关键:dfs(深搜),然后判断行列,这里先按照一行一行的查找,我当初也是这样想的,只是写到了一半就放弃了。下次应该注意!#include <bits/stdc++.h>using namespace std;int a[10][10];int sum;int is_row_col_repeat(int row,int col,int num){ for(int i...原创 2019-03-15 09:36:45 · 125 阅读 · 0 评论 -
质因数分解函数
编写函数void func(unsinged int n),实现计算并输出一个正整数的质因数分解式。例如:n为90时,输出90=2*3*3*5。①是素数就输出:可能直接想着先要做个判断了,如果是素数判断结束,输出这个素数。如果不是,在进入下面的分解的步骤吧。但是,有没有人想过素数的定义是什么?素数是一类只能被1或自身整除的数字对吧?如果去掉之前的这个判断,直接在接下来的分解步骤中...原创 2020-01-01 15:10:43 · 1728 阅读 · 0 评论 -
E - Cash Machine
A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill denominations, say Dk, ...原创 2019-05-12 21:29:26 · 306 阅读 · 0 评论 -
大数乘法
题目:求两个不超过200位的非负整数的积。输入数据有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出要求一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。输入样例1234567890098765432100输出样例1219326311126352690000题目提示:在下面的例子程序中,用unsig...原创 2019-04-29 20:59:27 · 8407 阅读 · 2 评论 -
最优分解问题
问题描述:设n是一个正整数,现在要求将n分解为若干个互不相同的自然数的和,使这些自然数的乘积最大。输入 10输出 30(被分解为5 2 3)题目分析:1、若a+b等于一个常数,则|a-b|越小,a*b就越大。要使得加数互不相同,又尽可能集中,那加数只能是连续的自然数了。2、一个数能分解,分解后乘积会比之前更大。如6,分成2和4,乘积8>6#include &...原创 2019-04-29 16:28:43 · 518 阅读 · 0 评论 -
用贪心算法求解最小生成树
一、实验要求与目的熟悉贪心算法的基本原理与适用范围。 使用贪心算法编程,求解最小生成树问题。二、实验内容任选一种贪心算法(Prim或Kruskal),求解最小生成树。对算法进行描述和复杂性分析。编程实现,并给出测试实例三、实现思想Prim:S、V为两个集合,S中初始为{1},V中包含了所有的顶点,然后从V-S中选出和S中顶点距离最近的顶点j,并将j添加到S中。设置两个数组...原创 2019-04-27 17:07:37 · 9231 阅读 · 0 评论