算法
文章平均质量分 64
BetterMan1999
充电沉淀中...
展开
-
LeetCode53.最大子数组和
偶然看到的一篇题解,作者思路清晰,循序渐进,写的很不错,学习下写作思路转载 2024-04-08 16:20:46 · 52 阅读 · 0 评论 -
一种限额功能的实现
一种简易的限额功能的实现,涉及锁和事务原创 2023-03-12 03:02:23 · 565 阅读 · 0 评论 -
最短包含字符串的长度
给定字符串str1和str2,求str1的字串中含有str2所有字符的最小字符串长度。输入描述:输入包括两行,第一行一个字符串,代表str1,第二行也是一个字符串,代表str2。输出描述:输出str1的字串中含有str2所有字符的最小字符串长度,如果不存在请输出0。示例1输入abcdeac输出3说明“abc”中包含“ac”,且“abc”是所有满足条件中最小的。示例2输入12345344输出0public class MinLength { public s转载 2020-12-24 21:59:59 · 1186 阅读 · 1 评论 -
数值的整数次方
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32原创 2020-12-16 11:02:00 · 102 阅读 · 0 评论 -
二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0原创 2020-12-16 10:18:26 · 189 阅读 · 0 评论 -
剪绳子 II
给你一根长度为 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解释: 2 = 1 + 1, 1 × 1原创 2020-12-16 10:01:52 · 95 阅读 · 0 评论 -
剪绳子
给你一根长度为 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。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4原创 2020-12-15 20:27:46 · 96 阅读 · 0 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:比较,加入,最后把剩下的链表一次性加入/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2020-12-09 11:46:34 · 110 阅读 · 0 评论 -
两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:模拟,新链表的值=两链表值之和+进位,注意一下链表末尾进位情原创 2020-12-09 11:22:18 · 142 阅读 · 0 评论 -
缩写校验
给定⼀个⾮空字符串 s 和⼀个缩写 abbr,请校验它们是否匹配。 假设字符串中只包含⼩写字⺟,缩写中只包含⼩写字⺟和数字。缩写中的数字 表示其缩略的字符数;连续多位数字表示⼀个多位数。例如,字符串 “word” 的缩写有且仅有以下这些:[“word", “1ord”, “w1rd”,“wo1d”, “wor1”, “2rd”, “w2d”, “wo2”, “1o1d”, “1or1”, “w1r1”, “1o2”, “2r1”,“3d”, “w3”, “4"]。例 1:输⼊:s = “inte原创 2020-12-08 21:16:40 · 317 阅读 · 0 评论 -
合并时间区间
给定⼀个按开始时间从⼩到⼤排序的时间区间集合,请将重叠的区间合并。时间区间集合⽤⼀个⼆维数组表示,⼆维数组的每⼀⾏表示⼀个时间区间(闭区 间),其中 0 位置元素表示时间区间开始,1 位置元素表示时间区间结束。例 1:输⼊:[ [1, 3], [2, 6], [8, 10], [15, 18] ]返回: [ [1, 6], [8, 10], [15, 18]]解释:时间区间 [1, 3] 和 [2, 6] 有部分重叠,合并之后为 [1, 6]例 2:输⼊:[[1, 4], [4, 5]]原创 2020-12-08 20:39:16 · 488 阅读 · 0 评论 -
机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3原创 2020-12-07 20:37:24 · 133 阅读 · 0 评论 -
矩阵中的路径
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格原创 2020-11-30 21:42:44 · 70 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路:二分法,设i, j 分别指向数组两端,m = (i + j) / 2。当 nums[m] > nums[j]时: m 一定在 左排序数组 中因此 i = m + 1;原创 2020-11-28 20:12:38 · 112 阅读 · 0 评论 -
用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTail","a原创 2020-11-28 19:25:14 · 114 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000思路:二叉树的前序遍历顺序是:根节点、左子树、右子树,每个子树的遍历顺序同样满足前序遍历顺序。二叉树的中序遍原创 2020-11-27 23:40:08 · 120 阅读 · 0 评论 -
数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 :输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000思路一:暴力遍历数组,用set集合过滤重复数字class Solution { public int findRepeatNumber(int[]原创 2020-11-27 19:28:02 · 96 阅读 · 0 评论 -
二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 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,返回原创 2020-11-27 19:07:49 · 119 阅读 · 0 评论