- 博客(61)
- 收藏
- 关注
原创 Java 创建对象方式
Java中,类的实例化方法有四种途径:1)使用new操作符2)调用Class对象的newInstance()方法3)调用clone()方法,对现有实例的拷贝4)通过ObjectInputStream的readObject()方法反序列化类参考
2021-10-31 09:43:39 178
原创 Java8函数式编程
Java8新引入函数式编程方式,大大的提高了编码效率函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是Java支持函数式编程的基础。四大函数式接口1. ConsumerConsumer是一个函数式编程接口; 顾名思义,Consumer的意思就是消费,即针对某个东西我们来使用它,因此它包含有一个有输入而无输出的accept接口方法; 除此之外还有一个andThen方法//定义default Con
2021-10-30 20:20:38 220
原创 Java初始化list的8种方式
1. 常规方式List list = new ArrayList<>();list.add("1");list.add("2");list.add("3");System.out.println("getList1: " + list);2. Arrays 工具类// 生成的list不可变List list = Arrays.asList("1", "2", "3");System.out.println("getList2: " + list);// 如果要可变需要用A
2021-09-20 08:58:47 7817
原创 LCP 28. 采购方案
小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1import java.util.Arrays;class Solution { public int purchasePlans(int[] nums, int target) { long ans = 0;
2021-09-12 08:44:10 150
原创 redis学习
1. 用docker安装redis# 查找redis版本docker search redis# 安装最近的redis版本docker pull redis:latest# 启动redis # -itd 启动交户方式, 在后台运行# -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。docker run -itd --name redis-test -p 6379:6379 redis# 进
2021-06-13 16:01:18 154
原创 LeetCode 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水public static int trap(int[] height){ Stack<Integer> st = new Stack<Integer>(); int i = 0, ans = 0; while (i < height.length){ while(!st.empty() &&
2021-06-06 17:37:10 152
原创 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。 public static boolean isValid(String s) { Stack stack = new Stack(); for(Character c : s.toCharArray()){ boolean isNext = (c =
2021-06-06 11:13:55 99
原创 排序
快排public void quickSort(int left , int right, int []list){ if(left >= right){ return ; } int i, j ,t, temp; temp = list[left]; i = left; j = right; while(i!= j){ // 以temp.
2021-05-16 10:59:44 135
原创 按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { LinkedList<TreeNode> q = new LinkedList<>(); ArrayList<ArrayList<Integer>
2021-05-15 22:31:52 109
原创 把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { ArrayLis
2021-05-15 22:04:40 138
原创 剪绳子
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)private static int cutRope(int target) { int a = 0;
2021-05-15 20:59:47 104
原创 二叉树的下一个节点
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。public static TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode == null){ return null; } if(pNode.right != null){ // 查找 pNode.right 中
2021-05-12 19:50:32 121
原创 构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。import java.util.ArrayList;public class Solution { pub
2021-05-10 21:38:25 97
原创 正则表达式匹配
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * *
2021-05-10 20:58:16 266
原创 二叉搜索树第K个节点
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { int count = 0; TreeNode no
2021-05-09 01:06:45 184
原创 链表中环的入口节点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { List
2021-05-07 08:07:29 172
原创 对称二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。boolean isSymmetrical(TreeNode pRoot) { if(pRoot == null) { return true; } } boolean dfs(TreeNode left, TreeNode right){ if(left == null && right
2021-05-06 22:37:33 146
原创 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。public class Solution { boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) {
2021-05-05 20:47:15 117
原创 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007(归并排序)public class Solution { int [] nums, tmp; public int InversePairs(int [] array) { this.nums = array; tmp = new int[nums.leng
2021-05-05 18:14:25 132
原创 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 public int GetUglyNumber_Solution(int n){ if(n< 6){ return n; } // 用3个数分别记录当前2、3、5最多的个数 int n2 = 0; int n3 =
2021-05-05 17:29:46 133
原创 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 public String PrintMinNumber(int [] numbers) { for(int i = 0; i< numbers.length; i++){ for(int j = i + 1; j< numbers.length ; j++){
2021-05-05 16:55:10 123
原创 字符串排列问题
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。import java.util.*;public class Main{ private static HashSet hashSet = new HashSet(); private static ArrayList arrayList = new ArrayList(); publi
2021-05-05 13:57:48 101
原创 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { Tre
2021-05-05 13:19:56 98
原创 复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)public RandomListNode Clone(RandomListNode pHead) { if(pHead == null){ return null; } RandomListNode r
2021-05-03 17:19:16 97
原创 整数中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; for (int i = 1; i <= n ; i*= 10){ int high = n / (i * 10);
2021-05-03 16:24:26 168
原创 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树8/ \6 10/ \ / \5 7 9 11镜像二叉树8/ \10 6/ \ / \11 9 7 5public TreeNode Mirror (TreeNode pRoot) { TreeNode tmp; if(pRoot == null) return null; tmp = pRoot.right; pRoot.right
2021-05-03 14:41:44 108
原创 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.public static ArrayList<Integer> printMatrix(int [][]lis){ int c=lis[0].length; int k=lis.length; int tem=c&
2021-05-03 14:41:29 140
原创 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。import java.util.Stack;import java.util.*;public class Solution { int num = -1; Map<Integer, Integer> result = new HashMap<Integer, Integer>(); Map<Integer, Integer>
2021-05-03 14:41:12 91
原创 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.ArrayList;import java.util.*;public class Solution { public boolean IsPopOrder(in
2021-05-03 14:40:49 111
原创 二叉搜索树后序遍历
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)什么是二叉查找树:根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。(左右中)public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if
2021-05-03 14:40:11 233
原创 二叉树中和为某一值的路径
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> path = new ArrayList<Integer>(); public Arr
2021-05-03 14:39:51 187
原创 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Solution { public boolean HasSubtree(T
2021-05-02 15:43:52 80
原创 合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。public ListNode Merge(ListNode list1,ListNode list2) { ListNode result = new ListNode(0); ListNode rt = result; while(true){ if(list1 == null){ result.next =
2021-05-02 14:54:15 85
原创 反转链表
输入一个链表,反转链表后,输出新链表的表头。public ListNode ReverseList(ListNode head) { if(head != null){ ListNode result = new ListNode(head.val); ListNode rt = result; Stack<ListNode> stack = new Stack<ListNode>();
2021-05-02 14:35:24 121
原创 链表中倒数第K个节点
输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */public class Solution { /** * 代码中的类名、方法名、参数名
2021-05-02 14:09:59 90
原创 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public int[] reOrderArray (int[] array) { // write code here // write code here List<Integer> total = new ArrayList<Integer>();
2021-05-02 13:55:04 115
原创 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。public double Power(double base, int exponent) { if(base == 0) return 0; long b = exponent; double res = 1.
2021-05-02 11:55:57 83
原创 二进制中1的个数
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。public int NumberOf1(int n) { int count = 0; int flag = 1; while (flag != 0) { if((flag & n) != 0){ count ++; } flag = flag << 1;
2021-05-02 11:43:45 117
原创 跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。public class Solution { public int jumpFloor(int target) { if(target == 1){ return 1; } else if (target == 2){ return 2; }else if(target > 2)
2021-05-02 10:50:15 106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人