自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 备考华为机试

1.去除重复字母(力扣316)本题要求按照最小字典序返回,因此采用单调栈。public String removeDuplicateLetters(String s) { Deque<Character> deque = new ArrayDeque<>(); for (int i = 0; i < s.length(); i++) { if(deque.contains(s.charAt(i))){ conti

2022-03-28 15:14:51 455

原创 备考华为校招机试

1.基本计算器2(力扣227)本题主要利用栈实现,难点在于要考虑输入的数字可能不止一位,要把代表一个数的所有数字获取后再放入栈中,因此用num先来接收每一位数字并且做一个累加,等到遇到操作符时再将本数字压栈。由于输入的都是正整数,默认第一个数字前的操作符为'+'。字符串遍历完成后累加栈中的所有元素。public int calculate(String s) { Deque<Integer> deque = new ArrayDeque<>(); char

2022-03-26 11:39:58 607

原创 打卡代码随想录Day17

1.最长公共子序列(力扣1143)本题重点在于状态的转移,以dp[i][j]表示在第一个字符串中下标为i的字符前和在第二个字符串中下标为j的字符前最长的公共子序列长度。若当前两字符相等,有dp[i][j] = dp[i-1][j-1]+1,若不相等,有dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1])。public int longestCommonSubsequence(String text1, String text2) { int[][] dp =

2022-03-23 23:24:08 202

原创 打卡代码随想录Day16

今天仍然是DP的学习,但第一个题显然用回溯更加简单!1.目标和(力扣494)本题通过一个数组寻找目标和,由于可以任意在元素前加加减号,则利用回溯遍历所有情况,从第一个数开始遍历添加加号和减号的情况。int res = 0;public int findTargetSumWays(int[] nums, int target) { search(nums,target,0); return res;}public void search(int[] nums, int ta

2022-03-23 10:39:04 613

原创 打卡代码随想录Day15

今天开始进入DP的学习!新的一周,加油!1.斐波那契数(力扣509)本题虽然简单,但要按照解决DP问题的流程做。首先确定DP数组和下标的含义DP[i]即为第i个斐波那契数,接着找到递推公式:DP[i] = DP[i-1]+DP[i-2],递推公式初始化:DP[0]=0 DP[1]=1,举例推导:0,1,1,2,3,5,8,13.....public int fib(int n) { if (n <= 1) return n; int[] arr = new

2022-03-21 23:31:36 144

原创 打开代码随想录Day14

1.柠檬水找零(力扣860)本题较为简单,只有三种情况,模拟每种情况即可,在接收20时用到了贪心,先尽量用10,再用5,因为10只能用于20的找零,而5既可以用于10的找零又可以用于20的找零。 public boolean lemonadeChange(int[] bills) {// if(bills[0] != 5)// return false;// //记录当前手头零钱数量// HashMap<Integer,

2022-03-20 22:31:41 79

原创 打卡代码随想录Day13

1.跳跃游戏2(力扣45)本题需要得到跳跃到最后一个位置的最小步数,用curDistance和maxDistance存放当前可以覆盖的范围和该范围内能达到的最大范围,当走到当前可覆盖范围的最后一个时,将curDistance更新为maxDistance,并且步数加一,如果maxDistance达到或者超过最后一个位置则步数加一后返回步数。public int jump(int[] nums) { if(nums.length == 1) return 0; //记录

2022-03-19 23:57:40 144

原创 打开代码随想录Day12

今天准备结束回溯的学习。首先遇到的就是一个hard,但是其实并不难,只是开始对题的理解有了偏差浪费了很多时间,最终3个小时才完成。1.重新安排行程(力扣332)本题首先注意同一个行程可能在给定数组出现了多次,对于这种关系到频率的要用map存放,保证不重复用,其次由于返回的答案要是字典排序的最小值,我们首先要对给定数组进行排序,这样一来得到的第一个满足要求的结果就是最终结果。List<String> res = new ArrayList<>();//存放最终结果Lis

2022-03-19 00:13:16 737

原创 打卡代码随想录Day11

今天开始回溯法的学习,首先要明确回溯和递归是分不开的,且回溯一般将递归返回值设置为void。1.组合(力扣77)本题主要用来熟悉回溯的使用,首先递归函数返回值为void,然后首先判断是否满足返回条件,满足条件则放入结果集,然后返回,返回时回溯,否则递归调用。class Solution { List<Integer> list = new ArrayList<>(); List<List<Integer>> res = new A

2022-03-18 01:20:24 124

原创 打卡代码随想录Day10

今天的目标是结束二叉树的学习。1.二叉搜索树的插入操作(力扣701)若插入值小于节点值,则插入到左子树,若插入值大于节点值,则插入到右子树,插入的条件为寻找到空时,否则继续用插入值与节点值比较。class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if(root == null) return new TreeNode(val); else

2022-03-16 20:55:37 783

原创 打卡代码随想录Day9

今天仍然打卡代码随想录和JVM的视频。1.合并二叉树(力扣617)思路:合并到第一棵树上,若合并时其中一个为空,则返回另一个,均不为空时将第二棵树的值加到第一个树的值上。public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if(root1 == null && root2 == null) return null; else if(root1 != null &&amp

2022-03-16 00:26:18 5834

原创 打卡代码随想录Day8

今天仍然是二叉树的学习。要加油,也要爱生活,更要爱老婆!1.左叶子之和(力扣404)这里遍历每个节点,遇到是做叶子就将其值加入求和。public int sumOfLeftLeaves(TreeNode root) { return count(root);}public int count(TreeNode treeNode){ int sum=0; if (treeNode == null) return 0; if(treeNode

2022-03-14 23:32:56 914

原创 打卡代码随想录Day7

今天继续字符串的学习,不积硅步无以至千里!1.完全二叉树节点的个数。如果通过遍历得到结果这失去了这道题的意义,完全二叉树有自己的特征,即不存在没有左孩子只有右孩子的节点。public int countNodes(TreeNode root) { if(root == null) return 0; int res = 1; return count(root,res);}public int count(TreeNode treeNode,int

2022-03-13 23:43:36 394

原创 打卡代码随想录Day6

今天进入二叉树的学习,继续夯实基础。1.二叉树的前序、后序、中序遍历(力扣144、145、94)public List<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> res = new ArrayList<>(); traverse(root,res); return res;}public void traverse(TreeNode root,Arra

2022-03-12 22:57:32 557

原创 打卡代码随想录Day5

今天进入队列和栈的学习。1.括号匹配问题(力扣20)public boolean isValid(String s) { if(s.length()<=1) return false; Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { if(s.charAt(i)=='('||s.charAt(i)=

2022-03-11 20:11:40 182

原创 打卡代码随想录Day4

今天的习题与字符串有关。1.字符串反转(力扣541)public String reverseStr(String s, int k) { //每2k个字符翻转k个,若剩下的小于k个则全部反转。 char[] chars = s.toCharArray(); if(s.length() == 0||s.length()==1) return s; int l = 0; int index = 0; for (int i = 0; i

2022-03-11 00:41:04 153

原创 打卡代码随想录Day3

有关求和:1.三数之和(力扣15)双指针的应用,注意在什么条件下指针如何移动,还有就是要求返回的三元组不重复。public List<List<Integer>> threeSum(int[] nums) { Set<List<Integer>> r = new HashSet<>(); List<List<Integer>> res = new ArrayList<>();

2022-03-09 16:38:40 145

原创 打卡代码随想录Day3

今天进入链表的学习1.关于自定义链表部分操作(力扣707),需要注意的是index的取值范围,以及要定义虚拟头节点。class MyLinkedList { class Node{ int val; Node next; Node(int val){ this.val = val; } } Node head; int length; public MyLinkedLis

2022-03-08 19:41:56 258

原创 打卡代码随想录Day2

今天的题目有关数组中元素的移动,暴力解法的时间复杂度为O(n^2),采用双指针法,时间复杂度为O(n)。1.删除有序数组中的重复项(力扣26)从头开始遍历,遇到相同元素slowindex不变,遇到不同时记录fastindex的元素public int removeDuplicates(int[] nums) { int slowindex = 0; for (int fastindex = 0; fastindex < nums.length; fastindex++)

2022-03-07 14:57:38 223

原创 打卡代码随想录Day1

今天做的题目是有关二分查找的:1.二分查找基本题目(力扣704):在以前的基础上,考虑给定值比数组中最小的小或最大的大的情况。public int search(int[] nums, int target) { int low = 0; int high = nums.length-1; int result; if((target<nums[0])||(target>nums[nums.length-1])) return -1;

2022-03-06 23:36:12 113

原创 Java学习——二维数组的应用(回形数组)

java二维数组应用——回形数组

2021-12-20 19:52:10 381

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除