
算法整理
文章平均质量分 52
Aurevior
learing ... to be a better me.
展开
-
【刷题】剑指Offer
接上篇,动态规划剑指 Offer 47. 礼物的最大价值难度:中等在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?这题虽然难度中等,但其实很简单。先确定dp[i][j]的含义,在[i][j]处能够取得dp[i][j]价值的礼物;再考虑初始化,dp[0][0] = grid[0][0];接下来是转移方程,原创 2022-04-13 21:54:49 · 205 阅读 · 0 评论 -
动态规划专题
代码随想录中的动态规划确定DP[i]的含义确定DP初始化确定转移方程确定遍历方向举例推导DP数组62. 不同路径难度:中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?DP[i] [j]意味着从(0,0)到(i,j)有dp[i] [j]种不同的路径;举例可知,1*1,1*2,1*3,2*1,3*1都只有一原创 2022-04-13 21:53:33 · 318 阅读 · 0 评论 -
【刷题】剑指Offer
剑指 Offer 10- I. 斐波那契数列难度:简单写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。第一反应递归,超时了。class Solution { public int fib(int n) { return fibo(n); } public int fibo(int n){ if(n原创 2022-04-13 21:52:45 · 169 阅读 · 0 评论 -
【刷题】剑指Offer
剑指Offer 27. 二叉树的镜像难度:简单请完成一个函数,输入一个二叉树,该函数输出它的镜像。思路很简单,采用递归class Solution { public TreeNode mirrorTree(TreeNode root) { if(root == null){ return null; } TreeNode left = mirrorTree(root.left); TreeNode r原创 2022-04-13 21:51:56 · 93 阅读 · 0 评论 -
【刷题】剑指Offer
面试题32 - I. 从上到下打印二叉树难度:中等从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。一个二叉树的层序遍历,借助队列的FIFO特性实现。判断根节点是否为空,为空则输出一个空集合;不为空则将根节点加入队列输出队首元素,判断队首元素有无左右结点,若有,则加入队列循环直至队列为空。class Solution { public int[] levelOrder(TreeNode root) { if(root == null) retu原创 2022-04-13 21:51:12 · 81 阅读 · 0 评论 -
【刷题】剑指Offer
04. 二维数组中的查找难度:中等在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public boolean findNumberIn2DArray(int[][] matrix, int target) { int row = matrix.length; if(row == 0) return fa原创 2022-04-13 21:48:28 · 159 阅读 · 0 评论 -
【刷题】剑指Offer
06. 从尾到头打印链表难度:简单输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。从尾到头反过来可以利用栈先进后出的特性实现,同样,也可以将链表的每个结点值先遍历一遍,存入数组,利用数组可以利用下标取数的特性倒着取。利用栈的特点实现class Solution { public int[] reversePrint(ListNode head) { LinkedList<Integer> list = new LinkedList&l原创 2022-01-12 23:04:11 · 121 阅读 · 0 评论 -
【刷题】剑指Offer
感想:有序数组的搜索问题优先考虑二分法03. 数组中重复的数字难度:简单找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。看到不重复,想到HashSet,利用hashset元素不重复的特性,找出重复数字,但其实用Map也是一样。class Solution { public int findRepeatNumber(int[]原创 2022-01-16 22:23:14 · 191 阅读 · 0 评论 -
【刷题】剑指offer
09. 用两个栈实现队列难度:简单用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )这个示例给的,让我有点摸不着头脑…看了评论区大概懂了题目意思。其实就是两个栈实现队列,删除失败返回-1。栈(FILO)先进后出,队列(FIFO)先进先出。用两个栈实现队列,一个栈负责插入,另一个栈负责删除。class CQueue {原创 2022-01-10 21:42:35 · 96 阅读 · 0 评论 -
二分法查找
LeetCode704二分查找一直以来,都以为二分法很简单,但昨天一写代码就出问题,感觉还是理解得不够透彻。二分查找难度:简单给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。提示:你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。二分法可以有两种写法,定义区间不同,写法不原创 2022-01-02 11:01:00 · 518 阅读 · 0 评论 -
【刷题】剑指Offer
05. 替换空格难度:简单请实现一个函数,把字符串 s 中的每个空格替换成"%20"。Java中字符串不可变,可以循环字符串再向StringBuffer中添加元素。字符串也可以直接拼接,但开销略大。class Solution { public String replaceSpace(String s) { StringBuffer stringBuffer = new StringBuffer(); for(int i=0;i<s.length()原创 2022-01-12 23:05:53 · 87 阅读 · 0 评论 -
[刷题] leetcode19
19. 删除链表的倒数第 N 个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz数组法受876.链表的中间结点的影响,题中也规定了链表的结点个数,第一反应就是将链表放入数组,顺带统计节点个数,直接取出删除节点的pre结点进行删除。代码实现也很简单。要注意的是,当删除倒数第一个结点(第一个结点)时,如不进行特殊处理,.原创 2022-01-07 21:02:49 · 273 阅读 · 0 评论 -
最小花费爬楼梯(C语言)
本周第二题数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 (索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是...原创 2019-05-10 19:27:15 · 838 阅读 · 2 评论 -
leetcode 775:全局倒置与局部倒置
数组 A 是 [0, 1, ..., N - 1] 的一种排列,N 是数组 A 的长度。全局倒置指的是 i,j 满足 0 <= i < j < N 并且 A[i] > A[j] ,局部倒置指的是 i 满足 0 <= i < N 并且 A[i] > A[i+1] 。当数组 A 中全局倒置的数量等于局部倒置的数量时,返回 true 。对这道题,开始思...原创 2020-01-21 14:17:50 · 288 阅读 · 0 评论 -
leetcode628 三个数组成的最大乘积
博客还是得继续写。。。给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。之前其实也写过这个,不过是用c语...原创 2019-10-28 23:41:28 · 272 阅读 · 0 评论 -
leetcode 1128等价多米诺骨牌的数量
给你一个由一些多米诺骨牌组成的列表 dominoes。如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c。解法一:暴力循环class Solution { pu...原创 2020-01-21 16:47:45 · 193 阅读 · 0 评论 -
三个数组成的最大乘积
本周的算法题给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。思路很简单,先排序,记录0与负数的个数若Flag>=2 ,则乘积最大的情况就是两个负数相乘,再乘以第一个整数则其余情况就是,前三个数相乘int n ,a[N] = {0} ,i ,j ,t ,sum1 ,sum2 ,sum; int flag = 0; printf("输入数字总个数:"); ...原创 2019-06-29 14:50:05 · 761 阅读 · 0 评论 -
leetcode 66、加一 104、二叉树的深度
今天刷了两道简单算法题,整理自己理解的思路。66、加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1] 输出:...原创 2019-11-21 22:29:36 · 110 阅读 · 0 评论 -
leetcode 3、无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb” 输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb” 输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew” 输出: 3解释: 因为无重复字符的最长子串是 “wke”...原创 2019-10-30 23:56:09 · 84 阅读 · 0 评论 -
丑数的判断
最近开始留校了,有学习任务了这是这周的算法:编写一个程序判断给定的数是否为丑数。 (丑数就是只包含质因数 2, 3, 5的正整数)int Judge(int n){ int k = n; while(k != 1){ if(n % 2 == 0){ n /= 2; }else if(n % 3 == 0){ n /= 3; }else if(n % ...原创 2019-07-23 16:28:11 · 1922 阅读 · 0 评论 -
leetcode946
给定 pushed 和 popped 两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true解释:我们可以按以下顺序执行:push(1), push(2), push...原创 2019-11-23 16:22:29 · 258 阅读 · 0 评论 -
给定一个正整数数组 nums。找出该数组内乘积小于 k 的连续的子数组的个数
本周的算法题是给定一个正整数数组 nums。找出该数组内乘积小于 k 的连续的子数组的个数 示例 输入: nums = [10,5,2,6], k = 100,输出: 8 解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6] 需要注意的是 [10,5,2] 并不是乘积小于100的子数组 ...原创 2019-05-31 08:52:22 · 1507 阅读 · 0 评论 -
leetcode 164 最大间距(比较排序 && 桶排序)
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1: &n;输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返...原创 2019-12-14 17:06:45 · 159 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 (atoi)
请你来实现一个 atoi 函数,使其能将字符串转换成整数。题目要点总结:丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。在任何情况下,若函数不能进行有效的转换时,请返回 0...原创 2019-11-08 19:36:07 · 126 阅读 · 0 评论 -
连续整数之和(C语言实现)
连续整数之和(C语言实现)给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N?示例 1: 输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。示例 2: 输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 + 4示例 3: 输入: 15 输出: 4 解释: 15 = ...原创 2019-06-22 21:38:36 · 6886 阅读 · 0 评论 -
给定一个非负整数num,反复将各个位上的数字相加,直至结果是一位数
本周的第一道题目:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2解题思路:取出数据的每一位,进行相加,直至满足条件。下面是C语言采取循环的解决方法#include<stdio.h&...原创 2019-05-08 17:56:21 · 8593 阅读 · 0 评论 -
删除链表的倒数第几个节点
这两周略有偷懒,没有按时写博客,要坚持!本周题目给定一个链表,删除链表的倒数第 n 个节点,并且输出删除后的链表。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。我有两种思路去解决这个问题(是一个带头指针(不存数据,只指向第一个节点)的链表)...原创 2019-05-06 22:54:39 · 254 阅读 · 0 评论 -
分治算法的经典例题,假币问题
每周都有几道算法题啦。第一周第一周只有一道,是分治算法一道比较经典的例题,题目如下:有16个硬币的袋子。16个硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。我们要找出这个伪造的硬币。我们有一台可用来比较两组硬币重量的仪器,利用这台仪器,可以知道两组硬币的重量是否相同。如果数目较少,我们可以采用逐个比较的方法,寻找出假币的位置。但为了体现算法思想,还是采用分治的方法解决。分治算...原创 2019-04-06 19:27:22 · 4180 阅读 · 0 评论 -
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。(C语言实现)
本周只有一道链表题给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1: 输入: 1->1->2 输出: 1->2示例 2: 输入: 1->1->2->3->3 输出: 1->2->3#include<stdio.h>#include<stdlib.h>int iCoun...原创 2019-05-13 20:26:09 · 2609 阅读 · 0 评论