力扣牛客每日一练
总结分析OJ题
星星21211
Will come back
展开
-
动态规划每日一练(3)
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。(1)偷窃第kk间房屋,那么就不能偷窃第k-1k−1间房屋,偷窃总金额为前k-2k−2间房屋的最高总金额与第kk间房屋的金额之和。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。(2)不偷窃第kk间房屋,偷窃总金额为前k-1k−1间房屋的最高总金额。...原创 2022-07-26 20:58:34 · 91 阅读 · 0 评论 -
动态规划每日一练(2)
它意味着爬到第xx级台阶的方案数是爬到第x-1x−1级台阶的方案数和爬到第x-2x−2级台阶的方案数的和。很好理解,因为每次只能爬11级或22级,所以f(x)f(x)只能从f(x-1)f(x−1)和f(x-2)f(x−2)转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。你可以选择从下标为0或下标为1的台阶开始爬楼梯。2.使用最少花费爬楼梯。...原创 2022-07-26 17:51:50 · 93 阅读 · 0 评论 -
动态规划每日一练(1)
斐波那契数的边界条件是F(0)=0F(0)=0和F(1)=1F(1)=1。T0=0,T1=1,T2=1,且在n>=0的条件下Tn+3=Tn+Tn+1+Tn+2。给你整数n,请返回第n个泰波那契数Tn的值。原创 2022-07-22 20:15:14 · 240 阅读 · 0 评论 -
剑指offer 64:求1+2+3+...+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例1 输入:5 返回值:15 示例2 输入:1 返回值:1 class Sum { public: Sum() { _ret+=_i; _i++; } static int Getret() { retur.原创 2022-01-22 16:24:56 · 68 阅读 · 0 评论 -
力扣 61:旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 题目链接~~~~ 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2: 输入:head = [0,1,2], k = 4 输出:[2,0,1] 思路: 1.当k=链表长度的时候是一个循环,所以先给k模上链表长度,然后进行k次尾删尾插即可 2.将链表练成一个环,在k模 方法1: int ListNode(struct ListNode* head){ st.原创 2021-12-05 13:35:20 · 121 阅读 · 0 评论 -
力扣 24:两两交换链表中的结点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 题目链接~~~~ 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 思路:链表长度为单数时最后一个不用交换,可以用两个指针跟随着走。 void Swap(int* left,int* right) { int temp=*left;.原创 2021-12-05 12:43:15 · 88 阅读 · 0 评论 -
力扣 19:删除链表的倒数第N个结点
给你一个链表,删除链表的倒数第 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] 思路:首先要找到待删的结点位置 1.可以先计算整个链表的长度,然后就可以让遍历的指针指到待删结点的前一个结点 2.也可以用快慢指针解决,也是找到待删结点的前一个 方法1: int List(struct L.原创 2021-12-05 12:17:40 · 88 阅读 · 0 评论 -
力扣 2:两数相加
题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 题目链接~~~~ 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 示例 2:: 输入:l1 = [0], l2 = [0] 输出:[0] 示例 3: 输入:l1 = [9,9,.原创 2021-12-05 11:23:43 · 73 阅读 · 0 评论 -
力扣 20:有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 题目链接~~~~~~ 示例 1: 输入:s = “()” 输出:true 示例 2: 输入:s = “()[]{}” 输出:true 示例 3: 输入:s = “(]” 输出:false 示例 4: 输入:s = “([)]” 输出:false 示例 5: 输入:s = “{[]}” 输出:true 思路:遇到左括号.原创 2021-12-04 22:20:18 · 191 阅读 · 0 评论 -
面试高频~单链表OJ题总结(二)
文章目录1.力扣141:环形链表2.力扣142:环形链表找入口3.力扣160:相交链表4.力扣138:复制带随机指针的链表 1.力扣141:环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链原创 2021-11-27 18:21:35 · 294 阅读 · 3 评论 -
面试高频~单链表OJ题总结(一)
1.力扣208:移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 分析: 1.考虑链表为空的情况 2.考虑头结点等于val的情况 struct ListNode* removeElements(struct ListNode* head, int val){ //1.生成新的链表头(用来防止原链表头需要删除的情况) struct ListNode* newhand = malloc原创 2021-11-27 12:45:59 · 524 阅读 · 3 评论