刷题
刷题笔记
Kuany_
这个作者很懒,什么都没留下…
展开
-
类似背包问题,允许超过容量的最小价值
第一行输入n和m,代表物品个数和最大容量余下n行输入n组物品v w代表物品的价值和容量输出物品能超出一定容量的最小价值和其容量例如输入6 370025 360022 180010 9006 6004 3001 60输出27 3720#include <cstdio>#include <cstring>#include <algorithm>#define ll long long const int inf = 0x3f3f3原创 2021-04-01 17:29:21 · 1069 阅读 · 4 评论 -
声网09-15,求1-n的最大公约数gcd
声网09-15,求1-n的最大公约数今天声网25个选择+2编程题,题目全是英文,这道题是第二题。题目描述大致是输入T组数据,每一组是一个数字n,输出每一个数n其从1到n的最大公约数gcd最大值,举个例子,求3的gcd最大值,也就是求gcd(1,2),gcd(1,3),gcd(2,3)的最大值输入形式:235输出形式:12思路: 首先想到的是暴力做法,定义一个求最大公约数的函数,然后针对每一个数用双指针两层遍历循环求gcd,然后保存其最大值,但是提交不通过显示超时(当时数据规模记不得原创 2020-09-15 22:15:07 · 760 阅读 · 1 评论 -
给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低
给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低今天快手面试,面试官问我对各种排序算法了解吗,我说了解,然后他给我出了一道题,给定一个无序数组,求第K大的数,要求不能使用额外的空间,时间复杂度尽量低,当时有点懵…我能想到的只能是用数组滚动遍历一遍,时间复杂度为O(n),空间复杂度也O(n)…或者排序再遍历,实在想不出,面试官给了一个思路:使用分治和快排的思想,这才恍然大悟。贴上代码:#include <bits/stdc++.h>using namespace原创 2020-09-14 23:52:04 · 633 阅读 · 0 评论 -
leetcode面试题 16.25. LRU缓存——LRU最近最少使用算法
leetcode面试题 16.25. LRU缓存——LRU最近最少使用算法首先介绍下LRU LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。 因为我们是对缓存进行操作,那么久要求时间复杂度尽可能的低,那么我们就可以查找有无此key的时候用哈希表进行查找,原创 2020-09-07 13:49:13 · 678 阅读 · 0 评论 -
从labuladong东哥那里看到的位运算小技巧
从labuladong东哥那里看到的位运算小技巧1. 利用或操作 `|` 和`空格`将英文字符转换为小写2. 利用与操作 `&` 和`下划线`将英文字符转换为大写3. 利用异或操作 `^` 和`空格`进行英文字符大小写互换4. 判断两个数是否异号5. 不用临时变量交换两个数6. n&(n-1)用来消除数字 n 的二进制表示中的最后一个 17. 判断一个数是不是 2 的指数8. 查找只出现一次的元素9. n>>1表示n/2,n<<1表示n*2就不细说了说实话,最近做题原创 2020-08-23 17:52:03 · 1369 阅读 · 1 评论 -
Leetcode——二叉树的前序(第144题)、中序(94)、后序(145)、层序遍历(102)的递归和迭代写法总结
Leetcode——二叉树的前序(第144题)、中序(94)、后序(145)、层序遍历(102)的递归和迭代写法总结1. 给定一个二叉树,返回它的 前序 遍历。2. 给定一个二叉树,返回它的 中序 遍历。3. 给定一个二叉树,返回它的 后序 遍历。4. 给定一个二叉树,返回它的 层序 遍历。二叉树定义/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;原创 2020-08-22 14:40:45 · 547 阅读 · 0 评论 -
经典背包问题3——背包问题求方案数 、背包问题求具体方案
经典背包问题3——背包问题求方案数 、背包问题求具体方案1. 背包问题求方案数2. 背包问题求具体方案1. 背包问题求方案数有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 最优选法的方案数。注意答案可能很大,请输出答案模 109+7的结果。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N行,每行两个整数 vi,wi,用空格隔原创 2020-08-20 00:38:20 · 2510 阅读 · 0 评论 -
经典背包问题2——混合背包问题、二维费用的背包问题、分组背包问题
经典背包问题2——混合背包问题、二维费用的背包问题、分组背包问题1. 混合背包问题2. 二维费用的背包问题3. 分组背包问题1. 混合背包问题有 N 种物品和一个容量是 V的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和原创 2020-08-19 14:42:45 · 668 阅读 · 0 评论 -
leetcode 思路——64. 最小路径和——174. 地下城游戏
leetcode 思路——64. 最小路径和——174. 地下城游戏64. 最小路径和174. 地下城游戏64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。动态规划思路:我们可以设dp[i][j]的意思为到达第i行第j列的最短路径和依次从左到右,从原创 2020-08-17 23:25:10 · 525 阅读 · 0 评论 -
leetcode 思路——300. 最长上升子序列
leetcode 思路——300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。动态规划思路:确定状态,dp[i]为0到第i个子序列的最长上升的长度;我们先固定右端点(右端点也要慢慢往右移),然后根据右端点,找出左端点到原创 2020-08-17 18:07:31 · 473 阅读 · 0 评论 -
经典背包问题1——01背包问题、完全背包问题、多重背包问题(数据范围100)、多重背包问题(数据范围1000/2000)
经典背包问题——01背包问题有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例原创 2020-08-05 10:33:37 · 1629 阅读 · 0 评论 -
leetcode 思路——322. 零钱兑换、518. 零钱兑换 II
leetcode 思路——322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1来源:力扣(LeetCode)链接:https://leetcode-cn.com/原创 2020-08-05 00:33:45 · 305 阅读 · 0 评论 -
leetcode 思路——647. 回文子串
leetcode 思路——647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2:输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输入的字符串长度不会超过1000。来源:力扣(LeetCode)链接:ht原创 2020-08-04 23:47:04 · 246 阅读 · 0 评论 -
leetcode 思路——120. 三角形最小路径和
leetcode 思路——120. 三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/t原创 2020-08-04 20:27:09 · 210 阅读 · 0 评论 -
leetcode 思路——53. 最大子序和
leetcode 思路——53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarray动态规划思想:我们先给dp进行下定义,可以理解为dp[i]的意义是当子数组的原创 2020-08-04 18:36:57 · 211 阅读 · 0 评论 -
leetcode105根据前序和中序遍历重建树、106根据中序和后序遍历重建树、889根据前序和后序遍历重建树的任意一种
leetcode105根据前序和中序遍历重建树、106根据中序和后序遍历重建树、889根据前序和后序遍历重建树的任意一种105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。889. 根据前序和后序遍历构造二叉树返回与给定的前序和后序遍历匹配的任何二叉树。这种类型的题其实就是一种套路,只要函数建的对,做这种题就不用受累!步骤一:建函数,主函数调用。此函数一般包含主函数的两个参数,前序和中序或者中序和后序和前序和后序;还有步骤二的ind原创 2020-07-24 19:20:02 · 243 阅读 · 0 评论 -
牛客网刷题笔记6-22
1.在定义函数中指定的形参,在未出现函数调用是,它们占内存中的存储单元。( )A.正确B.错误答案:B解析: 在定义函数中指定的形参变量,在未出现函数调用时,它们并不占用内存中的存储单元,只有在发生函数调用时,函数中的形参才被分配内存单元。 在调用结束后,形参所占的内存单元也被释放,因此形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。 因此题中描述是错误的,本题选B。2.在下面有关友元函数的描述中,正确的说法是()A.友元函数是独立于当前类的外部函数B.原创 2020-06-22 15:36:27 · 1351 阅读 · 1 评论 -
LeetCode-160-相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0原创 2020-06-04 13:51:05 · 100 阅读 · 0 评论 -
LeetCode-92-反转列表2
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-iiclass Solution {public: Lis原创 2020-06-03 21:55:32 · 236 阅读 · 0 评论 -
LeetCode-70-爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶...原创 2020-04-23 13:37:23 · 122 阅读 · 0 评论 -
LeetCode-11-盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色...原创 2020-04-23 17:15:34 · 126 阅读 · 0 评论