
力扣
crazyK.
代码小白
展开
-
相似度为K的字符串.力扣854
因为每次交换走完一跳路线之后都会进行回溯,所以有n中情况,但是没必要把所有的情况都执行一遍,在遍历时,如果当前交换次数已经大于最小交换次数,直接退出当前遍历。使用回溯法,每次对字符串进行字符交换时都会开辟一条新路线,当交换字符走完一跳路线后,需要进行回溯来走其他路线,求出交换次数,返回最小交换次数。”为例,展示其中一种交换路线。思路参考【瓜哇缪斯】原创 2022-09-21 18:14:03 · 166 阅读 · 0 评论 -
两数之和(二叉树版) Ⅳ .力扣653
一、题目描述二、思路利用HashSet记录二叉树中每个节点的值,在深度优先遍历时,判断Set集合中是否存在 k - 节点值 的值如果存在返回true,否则,将遍历到的节点值放入到Set集合中三、代码实现/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN原创 2022-04-14 14:24:54 · 571 阅读 · 0 评论 -
腐烂的橘子 . 力扣994
一、题目描述二、思路本题与力扣 542 题 01 矩阵类似,都是使用层序遍历BFS1.一开始,找出所有腐烂的橘子,将它们放入队列,作为遍历的第0层节点2.然后进行BFS遍历,判断每个节点的上、下、左、右四个方向,注意判断到节点位于边界的情况3.由于可能存在无法被污染的橘子,所以需要记录新鲜橘子的数量,在BFS遍历中,没污染一个橘子,就将新鲜橘子的数量减一。如果BFS遍历之后新鲜橘子的数量不为0,就说明存在无法被污染的橘子三、代码实现class Solution {原创 2022-04-12 16:01:08 · 347 阅读 · 0 评论 -
二叉树的层序遍历.力扣102
一、题目描述二、思路此题可以借助队列来做,先将二叉树的根节点入队,然后重复以下步骤直到队列为空:节点入队,节点的左子节点入队,节点的右子节点入队。 因为题中要求返回一个二元数组,树的每一个层级是数组的一元,定义一个list,在遍历队列时,可以根据队列的大小进行循环,将节点的值装进list中,遍历完成后,树的每一个层级就是数组的一元。三、代码实现/** * Definition for a binary tree node. * public cla...原创 2022-04-11 13:41:39 · 314 阅读 · 0 评论 -
删除排序链表中的重复元素.力扣83
一、题目描述二、思路 遍历链表,判断当前元素是否与下一个元素值相同,如果相同,则,丢弃当前元素,将下一个元素作为当前元素,递归返回结果。三、代码实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val ...原创 2022-04-08 10:00:02 · 618 阅读 · 0 评论 -
反转链表.力扣206
一、题目描述二、思路 我们要将链表有1 -> 2 -> 3 -> 4 反转为 1 <- 2 <- 3 <- 4,在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。(最好自己画图走一遍,思路更清晰)三、代码实现/** * Definition for singly-linked list. * publi...原创 2022-04-08 09:50:26 · 283 阅读 · 0 评论 -
有效的字母异位词.力扣242
一、题目描述二、思路如果两个字符串的长度不相同,不满足互为异位词的条件,直接返回false;定义两个int类型的数组,然后用两个foreach循环遍历两个字符串,数组分别记录两个字符串中每个字符出现的次数, 最后遍历数组,如果两个数组中有任何一个字符的出现次数不同,条件不成立,返回false三、代码实现class Solution { public boolean isAnagram(String s, String t) { //两字符串长度不等不满足条件,直原创 2022-04-07 16:43:57 · 275 阅读 · 0 评论 -
矩阵置零 . 力扣73
一、题目描述二、思路记录数组中为0的位置,定义两个boolean类型的数组,分别记录矩阵中哪行和哪列是否有0出现,然后遍历数组, 如果遍历到0,则该元素所在行和列的元素应都为0,将boolean数组中该位置设置为true,最后再遍历一次数组,将boolean数组标记的位置设置为0.三、代码实现class Solution { public void setZeroes(int[][] matrix) { int m = matrix.length;原创 2022-04-07 14:12:06 · 273 阅读 · 0 评论 -
有效的数独.力扣36
一、题目描述二、思路有效数独满足以下三个条件:1.同一个数字在每一行只能出现一次;2.同一个数字在每一列只能出现一次;3.同一个数字在每一个小九宫格只能出现一次。所以我们定义三个数组,分别记录每一行、每一列、每个小九宫格中每个数字的出现次数,若每个数字都只出现一次,则数独有效三、代码实现class Solution { public boolean isValidSudoku(char[][] board) { //记录每行每个数字出现次数原创 2022-04-07 13:19:43 · 244 阅读 · 0 评论 -
字符串的排列 .力扣567
一、题目描述二、思路 使用滑动窗口,定义两个int类型的数组,用来记录s1和s2两个字符串中每个字符出现的次数,将字符串中的字符转为ascii码,减去 'a' 的偏移,先遍历s1的长度个字符,如果条件不成立,则用滑动窗口对s2进行操作。三、代码实现class Solution { public boolean checkInclusion(String s1, String s2) { int n = s1.length(); in...原创 2022-04-07 09:50:12 · 185 阅读 · 0 评论 -
寻找重复数.力扣287
一、题目描述二、思路计数法,新定义一个数组cnt,遍历数组nums,在下标为数组nums[i]的cnt中记录nums数组中元素的出现次数cnt数组的下标对应nums数组的元素三、代码实现class Solution { public int findDuplicate(int[] nums) { int[] cnt = new int[nums.length+1]; for (int i = 0; i < nums.length原创 2022-04-05 12:31:58 · 386 阅读 · 0 评论 -
回文数.力扣9
一、题目描述二、思路将数字转化为数组,然后头尾双指针对数组进行遍历,如果两边元素不相等直接返回false三、代码实现class Solution { public boolean isPalindrome(int x) { //负数不是回文数 if (x < 0){ return false; } //将int值转化为数组 char[] arr = String.val原创 2022-04-05 11:55:33 · 310 阅读 · 0 评论 -
反转字符串中的单词 Ⅲ .力扣557
一、题目描述二、思路 将字符串转换为char类型的数组,遍历数组,在数组的起始位置定义一个索引,遇到空字符就对前面的单词进行反转,然后更新索引,从空字符的下一个位置开始,继续遍历,知道遇到空字符或结尾,最后用String的构造方法,将char数组转成结果返回三、代码实现class Solution { public String reverseWords(String s) {\ //将字符串转化为char数组 char[] arr...原创 2022-04-05 09:00:56 · 429 阅读 · 0 评论 -
两数之和Ⅱ - 输入有序数组.力扣167
一、题目描述二、思路因为数组是有序的,定义头尾双指针遍历数组,定义一个sum = num[i]+num[j]的值与目标值比较;如果相等,直接返回 i 和 j 的下标;如果目标值大,将尾指针向前移动使 sum 变小;如果目标值小,头指针向后移动,使 sum 变大三、代码实现class Solution { public int[] twoSum(int[] numbers, int target) { for(int i= 0,j = numbers.length-原创 2022-04-04 11:04:57 · 292 阅读 · 0 评论 -
移动零.力扣283
一、题目描述二、思路设置一个index记录数组中非零数的个数,循环遍历数组;如果遍历到的数不是0,则将该数放到下标为index的位置,index+1;循环遍历之后,index表示非0的个数,再次遍历数组,从index开始,后面的数字应全都是0三、代码实现class Solution { public void moveZeroes(int[] nums) { if (nums == null || nums.length <= 1) { ...原创 2022-04-04 09:00:04 · 325 阅读 · 0 评论 -
第一个错误的版本.力扣278
一、题目描述二、思路 注意这道题不能用for循环暴力解法,会超出时间限制。时间复杂度最低的方法是二分查找,用题目中给出的方法判断,然后不断调整边界。三、代码实现/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */public class Solution extends VersionCon...原创 2022-04-02 15:53:53 · 180 阅读 · 0 评论 -
跳跃游戏.力扣55
一、题目描述二、思路 根据题意,数组中每个位置可到达的最远位置为 i + nums[i] ,用for循环遍历数组,记录从起始位置开始体跳跃可到达的最远位置并更新,当可到达的最远位置小于数组的下标时,说明最后一个位置不可达三、代码实现class Solution { public boolean canJump(int[] nums) { //可到达的最远位置 int reach = 0; int n = nums...原创 2022-04-01 09:21:26 · 4117 阅读 · 0 评论 -
最长回文子串.力扣5
一、题目描述二、思路1.暴力法: 定义两个指针直接遍历字符串,记录最长回文字串的长度和起始位置,返回最长回文子串2.中心扩散:与暴力法不同的是,这次遍历字符串的时候从中心开始向两边遍历,返回最长回文子串三、代码实现暴力法class Solution { public String longestPalindrome(String s) { int len = s.length(); //最长字串起始位置 int begin原创 2022-03-29 13:00:15 · 643 阅读 · 0 评论 -
无重复字符的最长字串.力扣3
一、题目描述二、思路本题可用滑动窗口来解答,从字符串的第一个字符开始遍历,遇到重复的停止,返回最大长度的字串1.使用两个指针代表字串的左右边界,一个代表字串起始位置,一个代表字串结束位置,从字符串的第一个位置开始遍历2.有指针向后移动,遇到子串中包含的字符停止3.一趟遍历完,将第一步选定字符的下一个字符作为起始位置4.重复上面3个步骤,直到字符串遍历完,得到最大字串长度三、代码实现class Solution { public int lengthOfLon原创 2022-03-28 15:54:24 · 596 阅读 · 0 评论 -
棒球比赛.力扣682
一、题目描述二、思路使用list对字符串列表进行操作,定义一个sum记录得分,for each循环遍历数组,然后用switch循环判断,对 list 和 得分 进行操作三、代码实现class Solution { public int calPoints(String[] ops) { int sum = 0; List<Integer> list = new ArrayList<>(); for(Str.原创 2022-03-26 09:43:20 · 368 阅读 · 0 评论 -
盛水最多的容器.力扣11
一、题目描述二、思路根据题目意思就是给了一个数组,数组中每个元素的值就是边界的高度,求最大面积盛水的面积 = 边界高度 x 两边界的距离将数组两端定义为边界,通过while循环前后遍历数组,当一边的边界小时,小的边界向另一边移动,返回最大面积三、代码实现class Solution { public int maxArea(int[] height) { if(height.length < 2){ return 0;原创 2022-03-24 16:03:50 · 322 阅读 · 0 评论 -
环形链表.力扣141
一、题目描述二、思路 定义快慢指针,一个走一步,一个走两步,遍历链表,当两指针相遇,说明链表成环。三、代码实现/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * }...原创 2022-03-19 20:38:46 · 393 阅读 · 0 评论 -
两数相加.力扣2
一、题目描述二、思路题中输入有两种情况,一种是输入的两链表长度相同;另一种是输入的两链表长度不等,那么我们就需要使俩链表长度相同,然后再进行操作1.先使输入的两链表长度相等2.遍历链表,将对应节点的值相加,结果 >= 10 的节点需要进 1 位 给下一个节点,注意进位时超过链表长度的情况三、代码实现/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2022-03-18 17:04:05 · 329 阅读 · 0 评论 -
有效的括号字符串.力扣678
一、题目描述二、思路题目中给出字符串中只含有 '(' , '*' , ')' 三种,对于输入的字符串无非就是三种情况:1.左括号(或*) 等于 右括号(或*)数量相等,返回true2.左括号(或*) 大于 右括号(或*)数量相等,返回false3.左括号(或*) 小于 右括号(或*)数量相等,返回false步骤:1.这里我们定义两个初始值为0的变量,一个代表左括号较多时,*代表右括号时左括号的数量l;另一个代表右括号较多时,*代表左括号时左括号的数量h。2.然后使用cha原创 2022-03-17 15:31:22 · 535 阅读 · 0 评论 -
将有序数组转换为二叉搜索树.力扣108
一、题目描述二、思路由题目可知给出的数组是二叉树的中序遍历(根左右),所以数组中间的数是二叉树的根节点,从这个点出发,每次选择数组最中间的数作为根节点进行构建,假如给定数组是[,-3-2,-1,0,1,2,3],下面进行图解1.将数组的中间数字0作为根节点,数组被分成了两部分2.继续递归调用此方法,-2和2分别构建成了左孩子和右孩子的根节点,同样孩子节点也被分成了两部分3.继续递归三、代码实现/** * Definition for a binary tre.原创 2022-03-03 15:15:10 · 319 阅读 · 0 评论