
java算法题
文章平均质量分 71
java算法题
小志的博客
随笔笔记,仅供参考
展开
-
LeetCode第20题——有效的括号
目录一、题目二、思路及图解(利用栈先进后出的规则实现)三、题目代码解析(利用栈先进后出的规则实现)一、题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:1、左括号必须用相同类型的右括号闭合。2、左括号必须以正确的顺序闭合。提示:1 <= s.length <= 104s 仅由括号 ‘()[]{}’ 组成示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”原创 2021-09-18 22:09:43 · 499 阅读 · 0 评论 -
leetCode第14题——最长公共前缀
目录一、题目二、思路及图解 (横向比较的方式实现)三、题目代码解析(横向比较的方式实现)四、思路及图解 (纵向比较的方式实现)五、题目代码解析(纵向比较的方式实现)一、题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。提示:1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成示例 1:输入:strs = [“flower”,“flow”,“f原创 2021-09-18 21:45:52 · 361 阅读 · 0 评论 -
leetCode第172题——阶乘后的零
目录一、题目二、题目代码解析(迭代法实现)三、进阶(计算因子方式实现)一、题目给定一个整数 n ,返回 n! 结果中尾随零的数量。提示:0 <= n <= 10的4次幂进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?示例 1:输入:n = 3输出:0解释:3! = 6 ,不含尾随 0示例 2:输入:n = 5输出:1解释:5! = 120 ,有一个尾随 0示例 3:输入:n = 0输出:0二、题目代码解析(迭代法实现)1、代码publi原创 2021-09-17 22:22:01 · 541 阅读 · 0 评论 -
leetCode第509题——斐波那契数
目录一、题目二、思路及图解(动态规划方式实现)三、题目代码解析(动态规划方式实现)四、思路(通项公式实现)五、题目代码解析(通项公式实现)一、题目斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。提示:0 <= n <= 30示例 1:输入:2原创 2021-09-17 21:59:49 · 411 阅读 · 0 评论 -
leetCode第27题——移除元素
一、题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。 例如,函数返回原创 2021-09-16 22:02:00 · 1178 阅读 · 0 评论 -
leetCode第21题——合并两个有序链表
目录一、题目二、迭代方式实现的思路三、题目代码解析(迭代方式实现)四、递归实现的思路五、题目代码解析(递归方式实现)一、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。提示:两个链表的节点数目范围是 [0, 50]示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]原创 2021-09-16 21:45:52 · 233 阅读 · 0 评论 -
leetCode第26题——删除有序数组中的重复项
一、题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3原创 2021-09-15 21:24:00 · 1112 阅读 · 2 评论 -
leetCode第9题——回文数
一、题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个原创 2021-09-15 21:04:43 · 439 阅读 · 0 评论 -
leetCode第7题——整数反转
一、题目给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0二、思路与算法我们只要能拿到这个整数的 末尾数字 就可以了。以原创 2021-08-30 22:42:30 · 320 阅读 · 0 评论 -
leetCode第344题——反转字符数组
一、题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”原创 2021-08-30 22:01:29 · 361 阅读 · 0 评论 -
leetCode第3题(找出字符串中不含有重复字符的最长子串的长度)
一、题目给定一个字符串str,请你找出其中不含有重复字符的最长子串的长度示例1输入: str=“abcabcbb”输出: 3解释: 因为无重复字符的最长子串是"abc",所以其长度为3示例2输入: str=“bbbbb”输出: 1解释:因为无重复字符的最长子串是"b",所以其长度为1示例3输入: str=“pwwkew”输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为3示例4输入: str=""输出: 0二、题目代码解析packag原创 2021-07-27 22:46:03 · 769 阅读 · 2 评论 -
leetCode第2题(两数相加)
一、题目给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字,请将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头提示:每个链表中的节点数在范围[1,100]内,0<Node.val<=9,题目数据保证列表表示的数字不含前导零示例1输入:l1=[2,4,3], l2=[5,6,4]输出:[7,0,8]解释:342+465=807,再取反示例2输入:l1=[0],l2=[0原创 2021-07-26 22:39:32 · 426 阅读 · 0 评论 -
leetCode第1题(求数组中两数之和等于给定的值)
一、题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标(假设每种输入智慧对应一个答案,但是数组中同一个元素在答案里不能重复出现),你可以按任意顺序返回答案。示例1输入:nums=[2,7,11,15] ,target=9输出:[0,1]解析:因为nums[0] + nums[1] == 9,因此返回[0,1]示例2输入:nums=[3,2,4] ,target=6输出:[1,2]解析:因为nums[原创 2021-06-11 23:28:18 · 1195 阅读 · 0 评论 -
java快速排序
快速排序的原理选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准...转载 2019-02-14 14:44:02 · 176 阅读 · 0 评论 -
java冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。/***主方法*/public static void main(String[] args) { int[] nums={3,6,...原创 2019-01-29 11:13:49 · 6918 阅读 · 4 评论 -
java选择排序
原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。举例:数组 int[] arr={5,2,8,4,9,1};第一趟排序: 原始数据:5 2 8 4 9 1最小数据1,把1放在首位,也就是1和5互换位置,排序结果:1 2 8 4 9 5第二趟排序:第1以外的数据{2 8 4 9 5}进行比较,2最小,排序结果...原创 2019-01-29 11:57:12 · 292 阅读 · 0 评论 -
二分查找算法
二分查找的条件:是对一组有序数组的查找,在使用二分查找的时候先要对数组进行排序。二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid把这个数组分为两半,前一半从下标0到mid-1,后一半从mid+1到数组最后一个元素(下标是数组长度减一)。把这个查找的元素key和数组下标为mid的元素进行比较,也就是和中间那个元素进行比较,如果比这个元素的小那么把查找范...原创 2019-02-13 22:36:35 · 753 阅读 · 0 评论