- 博客(151)
- 资源 (1)
- 收藏
- 关注
原创 买卖股票的最佳时机六题全解
买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。 //只允许买卖一次 public static int maxProfit(int[] prices) { if (prices == null || prices.length == 0){ return 0; } .
2020-10-30 09:00:40
422
1
原创 根据中序和后序遍历重建二叉树的思路和JAVA实现
package treeorder;public class InfixOrderPostOrderBuildTree { public static void main(String[] args) { InfixOrderPostOrderBuildTree t = new InfixOrderPostOrderBuildTree(); int[] inorder = new int[] {2,1}; int[] postorder = new
2020-09-15 19:04:01
646
原创 二叉树的层次遍历
public int[] levelOrder(TreeNode root) { List<Integer> list = new ArrayList<>(); if (root == null) { return new int[0]; } TreeNode p = root; Queue<TreeNode> s = new LinkedList<>();
2020-09-14 19:59:43
256
原创 二叉树的前序、中序、后序的迭代算法实现
public static List<Integer> preOrder(TreeNode root) { List<Integer> list = new ArrayList<>(); if (root == null) { return list; } Stack<TreeNode> stack = new Stack<>(); stack
2020-09-14 19:58:44
194
原创 根据前序遍历和中序遍历构件二叉树的思路及JAVA实现
public class PreInfixOrderMakeBinaryTree { public static void main(String[] args) { int[] preorder = new int[] {1,2}; int[] inorder = new int[] {2,1}; PreInfixOrderMakeBinaryTree t = new PreInfixOrderMakeBinaryTree(); T.
2020-09-14 19:56:16
246
原创 递增的三元组的实现思路及JAVA代码
package arrayandstring;public class IncreasingTriplet { public static void main(String[] args) { } //超出时间限制 public boolean increasingTriplet02(int[] nums) { if (nums == null || nums.length < 3) { return false;
2020-09-01 10:50:48
502
原创 字母异位分词分组
package arrayandstring;import java.util.*;public class GroupAnagrams { public static void main(String[] args) { String[] strs = new String[] {"eat", "tea", "tan", "ate", "nat", "bat"}; GroupAnagrams groupAnagrams = new GroupAnagrams
2020-08-31 19:02:38
125
原创 矩阵置零的两种思路及JAVA实现
package arrayandstring;import java.util.Arrays;import java.util.HashSet;//一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。//一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。//你能想出一个常数空间的解决方案吗?public class SetMatrixZeroes { public static void main(String[] arg
2020-08-31 18:35:52
344
原创 十进制转16进制
import java.util.Scanner;public class Q3 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String s; while (cin.hasNextLine()) { s = cin.nextLine(); long ans = toTen(s);
2020-08-31 15:35:27
106
原创 两个有序数列合并的逆序对的个数
import java.util.Scanner;//有序数组a,b 一个序列A = [a,b]求它的逆序对的个数,逆序对,0 <= i < j < n 且 A[i] > A[j]// 1 2 4// 3 5 6//1 2 4 3 5 6-->1(4,3)public class Q1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in)
2020-08-31 14:36:09
201
原创 最少的操作次数,构造等差数列,每次可以对一个数进行+1或者-1操作
思路:由等差数列An = An-1 + d我们只需要找出 d 即可,我们对数组进行排序,前面两个数可以+1,-1,不变有3*3=9种只需要找出其中需要操作次数最少的一种即可import java.util.*;public class Q2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt();
2020-08-31 14:32:10
3708
1
原创 螺旋矩阵的两种思路及JAVA代码
package arrayandstring;import java.util.ArrayList;import java.util.List;public class SpiralOrder { public static void main(String[] args) { //测试 int [][] matrix = { {1,2,3,4}, {5,6,7,8},
2020-08-20 22:09:32
248
原创 除自身以外数组的乘积的两种思路及JAVA代码
package arrayandstring;public class ProductExceptSelf { public static void main(String[] args) { } //给定一个数组,就出除自身外的所有元素的乘积,要求:不能使用除法,且在 O(n) 时间复杂度内完成此题。 //思路,如果可以使用除法,那么非常简单,只需要将数组的所有元素的乘积除以本身 就是 除自身外的所有元素的乘积 //如果输入数组中出现 0,那么这个方法就失效
2020-08-20 20:35:55
343
原创 Nim游戏的思路及JAVA代码
你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。作者:力扣 (LeetCode)链接:https://leetcode-cn.co
2020-08-20 20:05:33
893
原创 动态规划问题--“游戏王”,将每个游戏标上一个成就值,同时对每个游戏都估算一个通关所需要的天数,他计划在未来X天内让自己玩游戏的成就达到最大
import java.util.Scanner;/*题目描述:有许多程序员都热爱玩游戏,而小J自称为游戏王,曾玩过几百种游戏,几乎所有能玩到的游戏大作都玩遍了。随着时间的推移,他发觉已经没有游戏可以让他玩了!于是他想改玩一些古老的游戏,以成为真正的“游戏王”。他希望在接下来的一段时间内将过去出的游戏全部玩一遍,但是毕竟时间有限,因此他感到很苦恼。于是他想到一个计划,他先将每个游戏标上一个成就值,同时对每个游戏都估算一个通关所需要的天数,他计划在未来X天内让自己玩游戏的成就达到最大,那么他应
2020-08-19 15:17:18
205
原创 字符串形式的整形数字,删除其中K个数字(K小于字符串的长度), 使得剩余字符组成新的整数是最小的。
/* 给定一个非负的、字符串形式的整形数字,例如“12353789”,字符串的长度也就是整形数字的位数不超过10000位,并且字符串不会以0开头,小C需要挑选出其中K个数字(K小于字符串的长度)并删掉他们,使得剩余字符组成新的整数是最小的。输入描述第一行输入一串纯数字形式的字符串,组成一个正整数第二行输入一个正整数K (K < 字符串的长度)输出描述输出一个数字(字符串格式) *///思路:贪心算法,每次都删除左边较大的数字import java.util.Sca
2020-08-19 15:15:13
1156
1
原创 求一个点到另一个点的最短路径的思路及JAVA代码
import java.util.Arrays;import java.util.Scanner;/* 迷宫的最短路径: 求 一个点 到 另一个点 的最短路径 输入描述第一行输入两个个正整数 N和 P,其中N表示路标的数量, P表示通道的数量。 (1 < N <= 200, 0 <= P <= N * (N - 1) / 2 )接下来的P行,每行输入三个正整数 A, B, T,A表示起点路标的编号,B表示终点路标的编号,T表示路标A到路标B需
2020-08-19 15:13:24
1660
原创 缺失的第一个正数的思路和JAVA实现
import java.util.ArrayList;import java.util.List;public class FirstMissingPositive { public static void main(String[] args) { int[] nums = {1,2,0}; int firstPositive = firstMissingPositive(nums); System.out.println(firstPosi
2020-08-13 14:08:25
138
原创 两数相除,不得使用乘法、除法和模运算的思路和JAVA实现
public class Divide { public static void main(String[] args) { int ans = divide(11,3); System.out.println(ans); } //思路:查看除数divisor 是被除数dividend 的“几倍” public static int divide(int dividend, int divisor) { if (divisor
2020-08-13 13:49:11
286
原创 Pow(x,n)——求x的n次方的三种解决方法及JAVA实现
public class Pow { public static void main(String[] args) { double res = myPow(2,-3); System.out.println(res); } //思路1:循环计算 n次 x相乘,时间复杂度O(n), 当n非常大时,效率低 public static double myPow(double x, int n) { double res = 1.0
2020-08-13 13:09:01
2926
原创 0-n缺失的数字
import java.util.Arrays;public class MissingNumber { public static void main(String[] args) { int [] nums = {0,3,2}; } public static int missingNumber(int[] nums) { if (nums == null || nums.length == 0) { return 0
2020-08-13 11:07:45
187
原创 有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true作者:力扣 (Leet
2020-08-13 10:58:39
123
原创 杨辉三角的思路及JAVA代码
import java.util.ArrayList;import java.util.List;public class Generate { public static void main(String[] args) { List<List<Integer>> res = generate(5); System.out.println(res); } public static List<List<In
2020-08-13 10:27:05
202
原创 颠倒二进制位的两种思路及JAVA代码
public class ReverseBits { public static void main(String[] args) { int res = reverseBits02(-3); System.out.println(res); } //思路1:逐步移位,时间复杂度:O(log2N) public static int reverseBits(int n) { int res = 0; int .
2020-08-13 09:46:11
683
1
原创 汉明距离的4种思路及JAVA代码
public class HammingDistance { public static void main(String[] args) { int dis = hammingDistance03(1,4); System.out.println(dis); } //根据汉明重量的思路,比较每一个二进制位看看是否相同 public static int hammingDistance(int x, int y) { int d
2020-08-12 17:13:42
249
原创 位1的个数的两种思路及JAVA代码
package others;public class HammingWeight { public static void main(String[] args) { int n = -3; int count = hammingWeight02(n); System.out.println(count); } //思路1:循环和位移动 public static int hammingWeight(int n) {
2020-08-12 16:47:47
85
原创 3的幂的思路及JAVA代码
public class isPowerOfThree { public static void main(String[] args) { boolean ans = isPowerOfThree(81); System.out.println(ans); } public static boolean isPowerOfThree(int n) { int tmp = 1; for (int i = 0; i &
2020-08-12 13:36:09
241
原创 计数质数的思路和JAVA代码实现之
import java.util.Arrays;public class CountPrimes { public static void main(String[] args) { CountPrimes test = new CountPrimes(); int count = test.countPrimes(10); System.out.println(count); } //统计所有小于非负整数 n 的质数的数量。
2020-08-12 13:10:57
166
原创 FizzBuzz的三种思路及JAVA代码实现
import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class FizzBuzz { public static void main(String[] args) { } public List<String> fizzBuzz(int n) { List<String> res = new ArrayList<>
2020-08-12 12:29:56
996
原创 最小栈
最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null
2020-08-12 12:06:22
61
原创 打乱数组
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Shuffle { List<Integer> list; int [] source; public static void main(String[] args) { } public Shuffle(int[] nums) { list = n
2020-08-12 10:05:22
78
原创 打家劫舍的两种思路及JAVA代码实现
打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7
2020-08-12 09:11:55
427
1
原创 最大子序和的两种思路及JAVA代码
package dp;//给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。public class MaxSubArray { public static void main(String[] args) { int[] nums = {-2,1,-3,4,-1,2,1,-5,4};//[4,-1,2,1]-->6 //int max = maxSubArray(nums); int m
2020-08-11 21:03:23
144
原创 合并两个有序数组的三种思路及JAVA代码
package sortandsearch;import java.util.Arrays;public class MergeArrays { public static void main(String[] args) { int[] nums1 = {0}; int[] nums2 = {1}; merge(nums1,0,nums2,1); System.out.println(Arrays.toString(nums1
2020-08-11 12:40:50
329
1
原创 将有序数组转化为二叉搜索树的思路及JAVA代码
//将一个有序的数组构造成二叉搜索树 //二叉搜索树的中序遍历就是一个递增的序列 //思路:每次都以中间靠左的数作为根节点,递归构造二叉搜索树 public TreeNode sortedArrayToBST(int[] nums) { if (nums == null || nums.length == 0) { return null; } return helper(nums,0,nums.length
2020-08-10 21:50:57
247
1
原创 二叉树的层序遍历的思路及JAVA代码实现
//思路:广度优先搜索的改进 public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if (root == null) { return res; } Queue<TreeNode> queue
2020-08-10 21:33:44
545
1
原创 判断二叉树是否镜像对称的思路及JAVA代码
import java.util.List;public class Symmetric { public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNod
2020-08-10 21:20:16
583
原创 验证二叉搜索树的两种思路及JAVA代码实现
package tree;import java.util.ArrayList;import java.util.List;public class IsValidBSt { public static void main(String[] args) { TreeNode node1 = new TreeNode(2); TreeNode node2 = new TreeNode(1); TreeNode node3 = new TreeN
2020-08-10 17:54:44
185
原创 求二叉树的最大深度的两种思路及JAVA代码实现
import java.util.LinkedList;public class MaxDepth { public static void main(String[] args) { } //思路1 //递归求解树的最大深度 //树的深度等于左子树的深度和右子树的深度中的最大值 + 1 public int maxDepth(TreeNode root) { if (root == null) { ret
2020-08-10 16:44:45
395
原创 求环形链表的第一个入口结点的两种思路及JAVA代码
//给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 //为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始) // 。 如果 pos 是 -1,则在该链表中没有环。 //说明:不允许修改给定的链表。 //增加难度,需要返回环所在的结点的下标 public ListNode hasCycle03(ListNode head) { if (head == null || head
2020-08-10 16:21:48
219
coursedesign.zip
2020-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人