自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 KMP算法

class Solution { public int strStr(String haystack, String needle) { int n = haystack.length(), m = needle.length(); int[] pi = new int[m]; //kmp中j是共同前缀的长度 for(int i = 1, j = 0; i < m; i ++){ while(j >

2024-02-13 13:28:59 133 1

原创 括号生成(回溯解法)

题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联

2021-10-11 01:13:17 229

原创 经典问题:解数独

题目编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例:输入:board = [[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],[".",“9”,“8”,".","

2021-10-10 20:36:04 230

原创 子集问题(递归实现)

题目给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets著作权归领扣网络所有。商业转载

2021-10-10 17:41:47 351

原创 戳气球问题(动态规划)

题目有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出:167解释:nu

2021-10-09 22:04:45 256

原创 编辑距离(附带操作)

package N02;public class Solution { class Node{ int value; //选择 //0表示啥都不做,1表示插入,2表示删除,3表示替换 int choice; Node(int value, int choice){ this.value = value; this.choice = choice; } } public int minDistance(String str1, String str2)

2021-10-06 12:15:57 79

原创 外观数组(递归解法)

题目给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”描

2021-09-29 14:39:03 141

原创 在排序数组中查找元素的第一个和最后一个的位置(左右侧边界的二分查找法)

题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解答class Solution {

2021-09-27 23:02:06 131

原创 程序解数独问题

题目编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例:输入:board = [[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],[".",“9”,“8”,".","

2021-08-15 14:46:44 1011

原创 岛屿问题(无向图的通用解法)

题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [[“1”,“1”,“0”

2021-06-07 23:01:26 253 5

原创 从前序与中序遍历序列构造二叉树

题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal著作权

2021-05-01 11:27:43 94

原创 HashMap通过Value获得Key的方法

首先要明确一点的是,HashMap中Key是唯一的,但是Value是不唯一的。也就是说,Value值相等,可以是两个Key,所以我们采用LinkedList来存储key的集合public LinkedList<K> findKey(Map map, V value){ //创建用于存储Key的链表 LinkedList<K> keys = new LinkedList<>(); //通过遍历的方法来查找 Iterator iterator = map.keySe

2021-05-01 00:39:44 874 2

原创 HashMap的遍历方法

方法一:通过EntrySet遍历Map<K, V> map = new HashMap<>();Iterator iterator = map.entrySet().iterator();while(iterator.hasNext()){ Map.Entry entry = (Map.Entry)iterator.next(); K key = (K)entry.getKey(); V value = (V)entry.getValue();}方法二:通过KeyS

2021-05-01 00:25:37 85 1

原创 只出现一次的数字 解法一:HashMap存储

题目给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,99]输出:99提示:1 <= nums.length <= 3 * 104-231 <= nums[i] <= 231 - 1nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次来源:力扣(LeetCod

2021-04-30 23:46:34 221 4

原创 二叉树中最大路径和

题目路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,null,15,7]输

2021-04-30 00:20:34 257

原创 回文数

题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrom

2021-01-26 17:41:41 86

原创 字符串转换整数

题目请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查第一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“123

2021-01-25 10:33:38 1172

原创 整数反转(借助字符串反转)

上一篇: 整数反转(常规反转法)解答class Solution { public int reverse(int x) { //先转化为字符串 String s = Integer.toString(x); String s1 = s; //flag指示变量用来统一正负两种情况 int flag = 1; if(x < 0){ //截取负号后面的内容

2021-01-24 02:36:53 134

原创 整数反转(常规反转法)

题目给你一个 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来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr

2021-01-24 02:20:10 463

原创 Z字型变换

题目将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = “

2021-01-23 16:13:52 92

原创 最长回文子串问题

class Solution { public String longestPalindrome(String s) { int len = s.length(); //这个二维boolean数组用来存储从i到j的状态 boolean a[][] = new boolean[len][len]; //用于存放结果的字符串 String result = ""; //这里k是字符串长度 fo

2021-01-23 00:41:53 90

原创 寻找两个正序数组的中位数问题,方法二:双指针检索法

题目:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1 = [0,0], nums

2020-12-11 14:45:49 340

原创 寻找两个正序数组的中位数问题,方法一:合并数组检索法

题目:给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1 = [0,0], nums

2020-12-11 02:49:05 181

原创 经典算法:归并排序算法 java实现

package MergeSortAlgorithm;public class MergeSort { //归并,合并两个数组 public static void merge(int[] data, int start, int center, int end) { //第一个数组的首位 int i = start; //第二个数组的首位 int j = center + 1; //缓存数组 int[] tempArr = new int[end - start + 1]

2020-12-08 15:42:15 72

原创 快速排序算法,二分思想

package QuickSortAlgorithm;public class QuickSort { //快速排序算法,原地操作 public static void quickSort(int[] arr, int start, int end) { //交换辅助变量 int t; int i = start; int j = end; //结束条件 if(start >= end) return; //快排的基元 int temp = arr[start]

2020-12-08 14:49:59 435 2

原创 无重复字符的最长子串问题 (移动窗口法求解)

问题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。class Solution { public int lengthOfLongestSubstring(String s) { //本题采用滑动窗口来解决 //记录左边界 int left = 0; //记录最大值 int max = 0; //滑动窗口,用于装字符子串 Map<Character, Integ

2020-12-08 01:27:47 130

原创 两数相加问题 链表加法版

问题:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://leet

2020-12-07 13:33:32 103 2

原创 两数之和问题 hashmap版

上一篇的解法容易理解,采用了暴力求解法,但是时间复杂度是O(n^2),这里,采用了HashMap的方法,时间复杂度是O(n),实际上就是通过HashMap去掉了一层for循环,通过空间换时间,空间复杂度为O(n)可以参考我的上一篇文章,对照阅读 两数之和 java版package SumOfTwoNum;import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Solution

2020-12-03 14:25:39 360

原创 两数之和问题 两层for循环版

两数之和问题问题简介: 有一个数组,需要找出来满足a[i] + a[j] = target的i, j,其中target是指定的数,需要找出满足上面等式的下标i,j解决方法:暴力求解法package SumOfTwoNum;import java.util.Scanner;public class Solution { public static int[] findTwoSum(int[] nums, int target) { int len = nums.length; //这

2020-12-03 12:04:15 349

原创 经典算法:八皇后问题 java实现

import java.util.Scanner;public class EightQueen { private static int m = 0; //设置皇后的个数 public static int n; //棋盘 public static int[][] pan; //展示棋盘 public static void show() { System.out.println("第" + (++m) + "种解法为:"); for(int i = 0; i < n;

2020-11-26 04:31:18 227

原创 经典算法:汉罗塔问题 java实现

import java.util.Scanner;public class TowerOfHanoi { //用于记录移动的次数 static int m = 0; //展示函数 public static void move(int disk, char M, char N) { System.out.println("第" + (++m) + "次操作,将" + disk + "号盘从" + M + "移动到" + N); } public static void h

2020-11-26 03:06:40 365

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除