![](https://img-blog.csdnimg.cn/2020112917150877.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
冲
Sky-木落
程序猿!热爱编程、旅行、摄影、轻音乐等、
展开
-
938. 二叉搜索树的范围和
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { *原创 2021-04-28 20:35:23 · 62 阅读 · 0 评论 -
633. 平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:falseclass Solution { public boolean judgeSquareSum(int c) { int i = 0; int j = (int) Math.sqrt(c) + 1;; while (i原创 2021-04-28 20:09:04 · 56 阅读 · 0 评论 -
377. 组合总和 Ⅳ
一、方法一 递归(超时)class Solution { public int combinationSum4(int[] nums, int target) { if (target == 0) { return 1; } int res = 0; for (int num : nums) { if (target >= num) { res +=原创 2021-04-24 19:41:49 · 54 阅读 · 0 评论 -
1029. 两地调度
class Solution { public int twoCitySchedCost(int[][] costs) { int t = costs.length; int cha[] = new int[t]; int sum = 0; for(int i=0;i<t;i++){ cha[i] = costs[i][1]-costs[i][0];//计算人员到A城与到B城的消耗差原创 2021-04-22 20:59:09 · 109 阅读 · 0 评论 -
91. 解码方法
class Solution { public int numDecodings(String s) { int n = s.length(); s = " " + s; char[] cs = s.toCharArray(); int[] f = new int[n + 1]; f[0] = 1; for (int i = 1; i <= n; i++) { // a :原创 2021-04-21 19:32:41 · 48 阅读 · 0 评论 -
28. 实现 strStr()
实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = “hell原创 2021-04-20 08:53:42 · 94 阅读 · 0 评论 -
27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。for (int i = 0; i < len; i++) { print(nums[i])原创 2021-04-19 08:17:24 · 57 阅读 · 0 评论 -
数据结构之排序宋词记忆法
一、常见的排序算法总结二、排序宋词记忆法选泡插,分别是选择排序、冒泡排序和插入排序,这三种排序算法的平均时间复杂度是 N^2(N方谐音恩方),对应的稳定性分别是选择排序不稳定,冒泡排序稳定,插入排序稳定;快归堆,分别是快速排序、归并排序和堆排序,这三种排序算法的平均时间复杂度是 Nlog2N(谐音恩老恩),对应的稳定性分别是,快速排序不稳定,归并排序稳定,堆排序不稳定;希,代表希尔排序,该排序的平均时间复杂度是 N^1.3(谐音恩一三),对应的稳定性是不稳定排序;统计,分别是桶排序与计数排序,原创 2021-04-18 20:02:29 · 131 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II
class Solution { public int singleNumber(int[] nums) { int index = 0; Map<Integer, Integer> map = new HashMap<>(); for (int num : nums) { map.put(num, map.getOrDefault(num, 0) + 1); } for原创 2021-04-18 08:58:30 · 90 阅读 · 0 评论 -
打卡:26. 删除有序数组中的重复项
class Solution { public int removeDuplicates(int[] nums) { int len = 0; for (int i = 0, j = 0; j < nums.length - 1; j++) { if (nums[i] != nums[j + 1]) { nums[i + 1] = nums[j + 1]; i++;原创 2021-04-18 08:41:36 · 90 阅读 · 0 评论 -
643. 子数组最大平均数 I
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例:输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75思路:滑动窗口class Solution { public double findMaxAverage(int[] nums, int k) { int max = 0; int sum = 0; // 计算原创 2021-04-15 19:22:05 · 62 阅读 · 0 评论 -
441. 排列硬币
一、迭代法class Solution { public int arrangeCoins(int n) { for (int i = 1; i <= n; i++) { n = n - i; if (n <= i) { return i; } } return 0; }}二、二分查找 public static int原创 2021-04-15 16:58:03 · 61 阅读 · 0 评论 -
题目描述 实现函数 int sqrt(int x). 计算并返回x的平方根(向下取整)
解法一:可以直接使用库……public class Solution { public int sqrt(int x) { return (int) Math.sqrt(x); }}解法二:根据平方数的性质——连续n个奇数相加的结果一定是平方数。如:9=1+3+5;16=1+3+5+7;所以,不断的进行奇数相加,并判断x大小即可。代码如下:public class Solution { public int sqrt(int x) {原创 2021-03-09 17:26:01 · 1027 阅读 · 0 评论 -
两种方法求解n以内的素数
一、暴力求解优化(判断是否为偶数,j * j <= x)package leetcode;class Solution { public static void main(String[] args) { System.out.println(primezNum(100)); } // 暴力求解 public static int primezNum(int n) { int count = 0; for (i原创 2021-04-11 17:06:07 · 268 阅读 · 0 评论 -
斐波那契数列三种方法求解
一、暴力求解时间复杂度O(2n) public static int calcuate(int num) { if (num == 0) { return 0; } if (num == 1) { return 1; } return calcuate(num - 1) + calcuate(num - 2); }二、去重递归时间复杂度O(n) 空间复杂度原创 2021-04-11 16:13:59 · 154 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List<List<Integer>> levelOrder(TreeNode r原创 2021-04-10 19:02:10 · 53 阅读 · 0 评论 -
2. 两数相加
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }原创 2021-04-09 21:56:12 · 49 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
class Solution { public int majorityElement(int[] nums) { int res = nums[0], count = 0; for (int i = 0; i < nums.length; i++) { if (res == nums[i]) { count++; } else { count--;原创 2021-04-03 15:20:20 · 54 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字
一、方法一 (公式)class Solution { public int lastRemaining(int n, int m) { int ans = 0; // 最后一轮剩下2个人,所以从2开始反推 for (int i = 2; i <= n; i++) { ans = (ans + m) % i; } return ans; }}二、方法二(递归和一个不知道的什么方原创 2021-04-01 19:48:38 · 53 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
class Solution { public static int[][] findContinuousSequence(int target) { List<int[]> list = new ArrayList<>(); int sum = 0, limit = target - 1; for (int i = 1; i < limit; i++) { for (int j = i; ;原创 2021-04-01 19:09:48 · 55 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
class Solution { public int maxSubArray(int[] nums) { int res = Integer.MIN_VALUE; int cur = 0; for (int i = 0; i < nums.length; i++) { if (cur <= 0) { cur = nums[i]; } else {原创 2021-03-31 20:35:36 · 61 阅读 · 0 评论 -
322. 零钱兑换
class Solution { public int coinChange(int[] coins, int amount) { int[] dp = new int[amount + 1]; Arrays.fill(dp, Integer.MAX_VALUE); dp[0] = 0; for (int currentAmount = 1; currentAmount <= amount; currentAmount++) {原创 2021-03-31 16:07:35 · 65 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
class Solution { public int search(int[] nums, int target) { int left = 0, right = nums.length - 1, count = 0, mid = 0; while (left < right) { mid = (left + right) / 2 ; if (target > nums[mid]) {原创 2021-03-30 16:49:15 · 51 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
class Solution { public String replaceSpace(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { if (String.valueOf(s.charAt(i)).equals(" ")) { sb.append("%20");原创 2021-03-29 16:37:54 · 50 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字
class Solution { public int[] twoSum(int[] nums, int target) { // Map<Integer, Integer> map = new HashMap<>(); // for (int i = 0; i < nums.length; i++) { // int res = target - nums[i]; // if (map.原创 2021-03-29 15:49:56 · 50 阅读 · 0 评论 -
58. 最后一个单词的长度
class Solution { public int lengthOfLastWord(String s) { int length = 0; for (int i = s.length() - 1; i >= 0; i--) { if (s.charAt(i) != ' ') { length++; } else if (length != 0) {原创 2021-03-29 15:22:33 · 54 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
class Solution { public int[] spiralOrder(int[][] matrix) { if (matrix.length == 0) { return new int[]{}; } int[] arr = new int[matrix.length * matrix[0].length]; int top = 0; int bottom = matrix.leng原创 2021-03-29 14:47:08 · 56 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; return helper(root.left, root.right); } public boolean helper(TreeNode root1, TreeNode root2) { if (root1 == null &原创 2021-03-27 16:38:45 · 49 阅读 · 0 评论 -
面试题30. 包含min函数的栈
import java.util.*;class MinStack { Stack<Integer> stack; int min; /** initialize your data structure here. */ public MinStack() { this.stack = new Stack<>(); } public void push(int x) { if (stack原创 2021-03-25 07:21:50 · 67 阅读 · 0 评论 -
257. 二叉树的所有路径
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { *原创 2021-03-24 19:19:53 · 45 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
采用翻转链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public int[] reversePrint(ListNode head) { // 翻转链表原创 2021-03-24 18:48:54 · 52 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ import java.util.*;class Solution { public List<List<Integer>>原创 2021-03-24 07:33:56 · 50 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int[] levelOrder(TreeNode root) { if原创 2021-03-24 07:22:03 · 63 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
public class Solution { // you need to treat n as an unsigned value // 把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。 public int hammingWeight(int n) { int res = 0; while (n != 0) { n = n & (n - 1)原创 2021-03-22 22:29:21 · 58 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
一、非递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirrorTree(TreeNode root) { if原创 2021-03-22 22:09:32 · 61 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirrorTree(TreeNode root) { if (root原创 2021-03-22 21:45:27 · 52 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
一、递归版本class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } int left = maxDepth(root.left); int right = maxDepth(root.right); return Math.max(left, right) + 1; }原创 2021-03-22 21:39:09 · 60 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
import java.util.*;class Solution { public String reverseWords(String s) { s = s.trim(); String arr[] = s.split(" "); StringBuilder sb = new StringBuilder(); for (int i = arr.length - 1; i >= 0; i--) { if原创 2021-03-21 09:31:39 · 65 阅读 · 0 评论 -
21. 合并两个有序链表
一、非递归/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; }原创 2021-03-19 19:48:30 · 59 阅读 · 0 评论 -
15. 三数之和
import java.util.*;class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> list = new LinkedList<>(); Arrays.sort(nums); for (int i = 0; i < nums.length; i++) {原创 2021-03-17 17:24:36 · 89 阅读 · 0 评论