算法
算法
Ypopstar
这个作者很懒,什么都没留下…
展开
-
LeetCode--103--二叉树的锯齿形层次遍历
题目描述:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。输入:[3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]题意:题目描述题解:简单bfs队列中利用奇偶性判断一下是从前往后还是从后往前代码:/** * Definition for a binary tree node. * public class TreeNode { * int val;原创 2020-07-06 16:27:08 · 122 阅读 · 0 评论 -
LeetCode--5--最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。输入:babadcbbd输出:babbb题意:题目描述题解:直接搞代码:class Solution { public String longestPalindrome(String s) { int len = s.length(); if (len < 2) { return s; }原创 2020-07-06 16:25:35 · 103 阅读 · 0 评论 -
LeetCode--96--不同的二叉搜索树
题目描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?输入:3输出:5题意:题目描述题解:卡特兰数代码:class Solution { public int numTrees(int n) { int[] G = new int[n + 1]; G[0] = 1; G[1] = 1; for (int i = 2; i <= n; ++i) { for (in原创 2020-07-06 16:24:44 · 82 阅读 · 0 评论 -
LeetCode--73--矩阵置零
题目描述:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。输入:[[1,1,1],[1,0,1],[1,1,1]][[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[1,0,1],[0,0,0],[1,0,1]][[0,0,0,0],[0,4,5,0],[0,3,1,0]]题意:题目描述题解:开一个数组记录一下,哪些行和列需要修改,然后直接改就好了代码:class Solut原创 2020-07-06 16:23:50 · 111 阅读 · 0 评论 -
LeetCode--258--各位相加
题目描述:给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。输入:38输出:2题意:题目描述题解:直接搞代码:class Solution { public int addDigits(int num) { int ans = num; while(true){ ans = getDigits(ans); if(ans < 10) return ans; }原创 2020-07-06 16:22:35 · 94 阅读 · 0 评论 -
LeetCode--26--删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,2]nums = [0,0,1,1,1,2,2,3,3,4]输出:25题意:题目描述题解:直接搞代码:class Solution { public int removeDuplicates(int[] nums) { i原创 2020-07-06 16:21:39 · 92 阅读 · 0 评论 -
LeetCode--137--只出现一次的数字 II
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。输入:[2,2,3,2][0,1,0,1,0,1,99]输出:399题意:题目描述题解:用一个map记录一下,然后直接搞代码:class Solution { public int singleNumber(int[] nums) { int len = nums.length; HashMap<Integer,Intege原创 2020-07-06 16:20:30 · 83 阅读 · 0 评论 -
LeetCode--20--快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。输入:19输出:true题意:题目描述题解:直接搞代码:class Solution { public boolean isHappy(int n) {原创 2020-07-06 16:18:01 · 135 阅读 · 0 评论 -
LeetCode--112--路径总和
题目描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。输入:5/ 4 8/ / 11 13 4/ \ 7 2 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输出:22题意:题目描述题解:直接dfs搞代码:/** * Defin原创 2020-07-06 16:16:59 · 101 阅读 · 0 评论 -
LeetCode--268--缺失数字
题目描述:给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。输入:[3,0,1][9,6,4,2,3,5,7,0,1]输出:28题意:题目描述题解:用一个set记录一下,然后直接从0开始暴力代码:class Solution { public int missingNumber(int[] nums) { HashSet<Integer> set = new HashSet<Inte原创 2020-07-06 16:16:11 · 113 阅读 · 0 评论 -
LeetCode--27--移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。输入:给定 nums = [3,2,2,3], val = 3给定 nums = [0,1,2,2,3,0,4,2], val = 2输出:22题意:题目描述题解:直接搞代码:class Solution {原创 2020-07-06 16:15:05 · 97 阅读 · 0 评论 -
LeetCode--53--最大子序和
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入:[-2,1,-3,4,-1,2,1,-5,4]输出:6题意:题目描述题解:直接搞代码:class Solution { public int maxSubArray(int[] nums) { int ans = nums[0]; int sum = 0; for(int num: nums) {原创 2020-07-06 16:14:12 · 87 阅读 · 0 评论 -
LeetCode--82--删除排序链表中的重复元素 II
题目描述:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。输入:1->2->3->3->4->4->51->1->1->2->3输出:1->2->52->3题意:题目描述题解:直接搞代码:/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2020-07-06 16:12:56 · 90 阅读 · 0 评论 -
LeetCode--100--相同的树
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的输入:[1,2,3], [1,2,3][1,2], [1,null,2][1,2,1], [1,1,2]输出:truefalsefalse题意:题目描述题解:简单dfs直接搜两个树的左节点和右节点做比较代码:/** * Definition for a binary tree node. * public class TreeNode原创 2020-07-06 16:11:24 · 105 阅读 · 0 评论 -
LeetCode--67--二进制求和
题目描述:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。输入:a = “11”, b = “1”a = “1010”, b = “1011”输出:10010101题意:题目描述题解:直接搞代码:class Solution { public String addBinary(String a, String b) { StringBuffer ans = new StringBuffer();原创 2020-06-28 21:24:16 · 122 阅读 · 0 评论 -
LeetCode--83--删除排序链表中的重复元素
题目描述:反转一个单链表。输入:1->1->21->1->2->3->3输出:1->21->2->3题意:题目描述题解:可以通过将结点的值与它之后的结点进行比较来确定它是否为重复结点。如果它是重复的,我们更改当前结点的 next 指针,以便它跳过下一个结点并直接指向下一个结点之后的结点。代码:/** * Definition for singly-linked list. * public class ListNode {原创 2020-06-28 21:23:01 · 104 阅读 · 0 评论 -
LeetCode--206--反转链表
题目描述:反转一个单链表。输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL题意:题目描述题解:直接搞,其中记录一下即可代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { v原创 2020-06-25 21:32:24 · 274 阅读 · 0 评论 -
LeetCode--69--x 的平方根
题目描述:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。输入:48输出:22题意:题目描述题解:简单二分代码:class Solution { public int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid =原创 2020-06-25 21:30:59 · 133 阅读 · 0 评论 -
LeetCode--28--实现 strStr()
题目描述:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。输入:haystack = “hello”, needle = “ll”haystack = “aaaaa”, needle = “bba”输出:2-1题意:题目描述题解:直接搞代码:class Solution { public int strStr(S原创 2020-06-25 21:30:14 · 102 阅读 · 0 评论 -
LeetCode--19--删除链表的倒数第N个节点
题目描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。输入:1->2->3->4->5, 和 n = 2.输出:1->2->3->5.题意:题目描述题解:首先遍历一遍找出链表的长度再去找倒数第n个也就是正数长度-n个代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode原创 2020-06-25 21:29:16 · 97 阅读 · 0 评论 -
LeetCode--128--最长连续序列
题目描述:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。输入:[100, 4, 200, 1, 3, 2]输出:4题意:题目描述题解:用一个set记录一下直接找就好了记得在判断的时候要判断前一位在不在Set,避免重复算代码:class Solution { public int longestConsecutive(int[] nums) { int len = nums.length; HashSet&原创 2020-06-25 21:27:58 · 141 阅读 · 0 评论 -
LeetCode--129--求根到叶子节点数字之和
题目描述:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。输入:[1,2,3][4,9,0,5,1]输出:251026题意:题目描述题解:简单dfs直接搜到最后更新答案就好了代码:/** * Definition for a binary tree node. * public原创 2020-06-25 21:26:43 · 127 阅读 · 0 评论 -
LeetCode--111--二叉树的最小深度
题目描述:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。输入:[3,9,20,null,null,15,7]输出:2题意:题目描述题解:简单dfs找到没有左右结点为止就更新最小深度代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;原创 2020-06-25 21:25:28 · 104 阅读 · 0 评论 -
LeetCode--50--Pow(x, n)
题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数。输入:2.00000, 102.10000, 32.00000, -2输出:1024.000009.261000.25000题意:题目描述题解:快速幂代码:class Solution { public double myPow(double x, int n) { long N = n; return N >= 0 ? quickMul(x, N) : 1.0 /原创 2020-06-25 21:24:07 · 102 阅读 · 0 评论 -
LeetCode--55--跳跃游戏
题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。输入:[2,3,1,1,4][2,3,1,1,4]输出:truefalse题意:题目描述题解:贪心这样以来,我们依次遍历数组中的每一个位置,并实时维护 最远可以到达的位置。对于当前遍历到的位置 xx,如果它在 最远可以到达的位置 的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用x+nums[x] 更新 最远可以到达的位原创 2020-06-22 21:54:40 · 116 阅读 · 0 评论 -
LeetCode--90--子集 II
题目描述:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。输入:[1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]题意:题目描述题解:简单dfs排个序后直接爆搜,用set去重就好了代码:class Solution {List<List<Integer>> ans2 = new ArrayList<>(); HashSet<List<Integer原创 2020-06-22 21:52:56 · 95 阅读 · 0 评论 -
LeetCode--78--子集
题目描述:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。输入:nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]题意:题目描述题解:简单dfs直接爆搜即可代码:class Solution { List<List<Integer>> ans = new ArrayList<>(); public List<Lis原创 2020-06-22 21:51:50 · 94 阅读 · 0 评论 -
LeetCode--121--买卖股票的最佳时机
题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。输入:[7,1,5,3,6,4][7,6,4,3,1]输出:50题意:题目描述题解:直接暴力找到一个数,然后找到那个数后面的数,使后面数减去前面数最大即可代码:class Solution { public int maxProfit(int[] prices) {原创 2020-06-22 21:50:51 · 97 阅读 · 0 评论 -
LeetCode--94--二叉树的中序遍历
题目描述:给定一个二叉树,返回它的中序 遍历。输入:[1,null,2,3]输出:[1,3,2]题意:题目描述题解:按照中序遍历的定义,直接去模拟代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } *原创 2020-06-22 21:49:32 · 98 阅读 · 0 评论 -
LeetCode--62--不同路径
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?输入:m = 3, n = 2m = 7, n = 3输出:328题意:题目描述题解:简单dpdp[i][j]表示从i到j的路径数代码:class Solution { public int uniquePaths(int m, int n) {原创 2020-06-22 21:48:24 · 149 阅读 · 0 评论 -
LeetCode--102--二叉树的层序遍历
题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。输入:3/ 9 20/ 15 7输出:[[3],[9,20],[15,7]]题意:题目描述题解:层序遍历,BFS每次在一个队列里面取,取完之后弹出然后放代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode原创 2020-06-21 21:46:44 · 80 阅读 · 0 评论 -
LeetCode--107--二叉树的层次遍历 II
题目描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)输入:3/ 9 20/ 15 7输出:[[15,7],[9,20],[3]]题意:题目描述题解:层序遍历,BFS每次在一个队列里面取,取完之后弹出然后放代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * T原创 2020-06-21 21:45:00 · 116 阅读 · 0 评论 -
LeetCode--39--组合总和
题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。输入:candidates = [2,3,6,7], target = 7candidates = [2,3,5], target = 8输出:[[7],[2,2,3]][[2,2,2,2],[2,3,3],[3,5]]题意:题目描述题解:简单dfs代码:c原创 2020-06-21 21:42:58 · 123 阅读 · 0 评论 -
LeetCode--40--组合总和 II
题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。输入:candidates = [10,1,2,7,6,1,5], target = 8candidates = [2,5,2,1,2], target = 5输出:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]][[1,2,2],[5]]题意:原创 2020-06-21 21:41:50 · 118 阅读 · 0 评论 -
LeetCode--98-- 验证二叉搜索树
题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。输入:x = 1, y = 4输出:2/ 1 35/ 1 4/ 3 6题意:truefalse题解:每个节点带着最大值最小值参加遍历在最大值和最小值分别不为null的情况下比较 满足条件节点值严格大于最小值严格小于最大值时递归下一层节点进行比较递归原创 2020-06-21 21:40:27 · 99 阅读 · 0 评论 -
LeetCode--66--加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。输入:[1,2,3][4,3,2,1]输出:[1,2,4][4,3,2,2]题意:题目描述题解:直接搞代码:class Solution { public int[] plusOne(int[] digits) { for (int i = digits.length原创 2020-06-21 21:38:12 · 113 阅读 · 0 评论 -
招商银行信用卡中心2019秋招IT笔试(开发方向第二批)
题目名称:X游戏题目描述:我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?输入描述:输入正整数N输出描述:输出1到原创 2020-06-20 22:03:08 · 251 阅读 · 0 评论 -
招商银行信用卡中心2019秋招IT笔试(开发方向第三批)
题目名称:员工考勤记录题目描述:给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符:‘A’ : Absent,缺勤‘P’ : Present,到场如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考勤的组合能够满足要求输入描述:考勤周期的天数N(正整数)输出描述:这N天里能获得奖赏的考勤组合数输入:3输出:7题意:题目描述题解:简单算一下n + n * (n - 1)原创 2020-06-20 21:57:37 · 887 阅读 · 0 评论 -
LeetCode--461--用户分组
题目描述:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。输入:x = 1, y = 4输出:2题意:题目描述题解:直接搞代码:class Solution { public int hammingDistance(int x, int y) { return Integer.bitCount(x ^ y); }}...原创 2020-06-20 21:46:38 · 98 阅读 · 0 评论 -
LeetCode--77--组合
题目描述:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]题意:题目描述题解:基础dfs代码:class Solution { List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>原创 2020-06-20 21:45:47 · 81 阅读 · 0 评论