自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【面试算法题总结18】模拟

【代码】【面试算法题总结18】模拟。

2022-09-07 21:18:13 187 1

原创 【面试算法题总结17】图数据结构

例题1:课程表 IIclass Solution { // 存储有向图 List<List<Integer>> edges; // 存储每个节点的入度 int[] indeg; // 存储答案 int[] result; // 答案下标 int index; public int[] findOrder(int numCourses, int[][] prerequisites) { edge

2022-03-17 00:17:49 280

原创 【面试算法题总结01】输入输出处理基础

系列说明:【面试算法题总结】系列主要是以各个算法为单元总结常见算法题,主要题源为leetcode的《剑指offer》和《hot100》两个专题。链接如下:剑指offer和hot100这里简单说明一下,一道题目可能有多种解法,或者类似题目却有完全不同的解法,我每篇总结的例题并不一定用的都是标题写的算法,而是可能会拓展更多有关解法,以及类似题目。反正最终目标就是:誓死解决写算法得过且过、缺少训练量的问题。不熟的代码就一遍一遍的写,一遍一遍的理解,直到会写为止。面试时写算法的一点个人建议:高效运行&

2022-03-10 21:21:07 1690

原创 【面试算法题总结02】数组与字符串数据结构

数组与字符串数据结构: 例题1:二维数组中的查找class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if(matrix.length==0){ return false; } int row=0,col=matrix[0].length-1; while(row<matrix.le

2022-03-10 21:20:34 156

原创 【面试算法题总结03】链表数据结构

链表数据结构画图辅助解题 例题1:反转链表解法1:循环就画图,改变每个节点的指针方向就行了。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseLis

2022-03-10 21:18:47 103

原创 【面试算法题总结04】栈与队列数据结构

栈与队列数据结构: 例题1:用队列实现栈解法1:双队列的题解思路主要是一个push就调换一下队列。class MyStack { Queue<Integer> queue1; Queue<Integer> queue2; /** Initialize your data structure here. */ public MyStack() { queue1=new LinkedList<>();

2022-03-10 21:18:15 126

原创 【面试算法题总结05】树数据结构

树数据结构: 例题1:把二叉搜索树转换为累加树让我们逆中序遍历一下/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(in

2022-03-10 21:17:47 205

原创 【面试算法题总结06】排序算法

排序算法:例题1:排序数组解法1:冒泡排序最坏时间复杂度:O(n^2)特定超时class Solution { public int[] sortArray(int[] nums) { for(int i=0;i<nums.length;++i){ for(int j=i+1;j<nums.length;++j){ if(nums[i]>nums[j]){

2022-03-10 21:17:08 458

原创 【面试算法题总结07】双指针法

双指针法:主要有:1 快慢指针:主要解决链表中的问题2 左右指针:二分搜索法(见“二分搜索法总结”)、反转数组3 滑动窗口:快慢指针在数组(字符串)上的应用,主要解决字符串匹配的问题(见“滑动窗口总结”) 例题1:环形链表简单的方法有哈希表存储节点,但空间复杂度高。用快慢指针/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; *

2022-03-10 21:16:17 125

原创 【面试算法题总结08】二分搜索算法

二分搜索算法:常见搜索场景:寻找一个数,寻找一个数的左侧边界,寻找一个数的右侧边界主要问题:while是否有=,mid的加一和减一1 寻找一个数字:搜索区间选择双闭,故while要加=(退出条件是left==right+1),mid+1,mid-1。这样虽然可以通过线性搜索这个数的左、右侧边界,但这样就难以保证二分搜索对数级的时间复杂度了2 寻找一个数的左侧边界:搜索区间选择双闭,==target时right=mid-1,返回left,要检查其是否越上界3 寻找一个数的右侧边界:搜索区间选择双闭,

2022-03-10 21:15:16 455

原创 【面试算法题总结09】滑动窗口算法

滑动窗口算法: 例题1:最小覆盖子串这里注意一个细节:Integer值的比较一定要用.equals()方法,而不是==class Solution { public String minWindow(String s, String t) { Map<Character,Integer> need=new HashMap<>(); Map<Character,Integer> window=new HashMap&

2022-03-09 16:32:34 425

原创 【面试算法题总结10】广度优先搜索

广度优先搜索: 例题1:二叉树的层序遍历/** * 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, TreeNod

2022-03-09 16:32:00 272

原创 【面试算法题总结11】深度优先搜索算法(回溯算法)

深度优先搜索算法(回溯算法):我的理解就是:树(递归树)的深度优先搜索,进入下一层时前做选择,从下一层回来时撤销选择1 核心要关注 路径(已经做出的选择)、选择列表(当前可以做的选择)、结束条件(无法再做选择的条件)2 结构上来说是:循环里面套递归,递归前先剪枝不可选择的情况后做选择,递归后撤销选择 例题1:全排列解法1:因为要知道还没被用过的元素有哪些,比较好的办法有:利用本身给的nums数组,交换位置。class Solution { List<List<I

2022-03-09 16:31:16 417

原创 【面试算法题总结12】动态规划算法

动态规划算法:动态规划算法和回溯算法很像,需要明确basecase、状态、选择。动态规划的暴力穷举求解阶段就是回溯算法。只是有的问题可以构造最优子结构,找到重叠子问题,可以用dp table优化,将递归树大幅剪枝。一方面,动态规划问题的一般形式就是求最值。核心是穷举,但其存在“重叠子问题”,如果暴力穷举效率会极其低下,所以需要使用dp数组来优化穷举过程,避免不必要的计算。另一方面,动态规划问题一定会具备“最优子结构”(子问题必须相互独立),这样才能通过子问题的最值得到原问题的最值。最后,只有列出正

2022-03-09 16:27:32 926

原创 【面试算法题总结13】贪心算法

贪心算法: 例题1:任务调度器class Solution { public int leastInterval(char[] tasks, int n) { Map<Character, Integer> freq = new HashMap<Character, Integer>(); // 最多的执行次数 int maxExec = 0; for (char ch : tasks) {

2022-03-09 16:26:11 494

原创 【面试算法题总结14】空间换时间,时间换空间算法

空间换时间,时间换空间算法:1 空间换时间:使用HashMap保存数据 例题1:两数之和解法1:时间优先(HashMap)时间复杂度:O(n)空间复杂度:O(n)class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.leng

2022-03-09 15:31:27 2772

原创 【面试算法题总结15】位运算算法

位运算算法: 例题1:二进制中1的个数import java.io.*;class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count=0; while(n!=0){ ++count; n=(n-1)&n; }

2022-03-09 15:21:30 164

原创 【面试算法题总结16】数学相关算法

数学相关算法: 例题1:数值的整数次方快速幂n=-2147483648这个用例决定了要用long变量b。下面(b % 2) == 1可以变成(b & 1) == 1;b /=2;可以变成b >>= 1;class Solution { public double myPow(double x, int n) { if(x == 0) return 0; long b = n; double res = 1.0;

2022-03-09 15:18:44 369

原创 2022-02-28(剑指 Offer:06)

可以栈的思路,但这题要返回int[],所以就没有了原本的精妙

2022-02-28 20:00:00 75

原创 2022-02-27(剑指 Offer:03~05)

都算是根据题目要求进行编写即可。注意尽可能低的时间、空间复杂度即可。

2022-02-28 19:11:59 90

原创 2022-02-26(739. 每日温度)

遍历跳跃class Solution { public int[] dailyTemperatures(int[] temperatures) { int n=temperatures.length; int[] dp=new int[n]; dp[n-1]=0; for(int i=n-2;i>=0;--i){ int j=i+1; //temp标记是否原地踏步

2022-02-27 22:36:02 71

原创 2022-02-25(647. 回文子串)

解法1:动态规划法状态:dp[i][j] 表示字符串s在[i,j]区间的子串是否是一个回文串。class Solution { public int countSubstrings(String s) { // 动态规划 boolean[][] dp = new boolean[s.length()][s.length()]; int result = 0; for (int j = 0; j < s.length(); j

2022-02-25 15:56:14 114

原创 2022-02-24(621. 任务调度器)

class Solution { public int leastInterval(char[] tasks, int n) { Map<Character, Integer> freq = new HashMap<Character, Integer>(); // 最多的执行次数 int maxExec = 0; for (char ch : tasks) { int exec = fr

2022-02-24 18:03:35 234

原创 2022-02-23(581. 最短无序连续子数组)

解法1:排序+判断是否相同class Solution { public int findUnsortedSubarray(int[] nums) { int[] temp=new int[nums.length]; for(int i=0;i<nums.length;++i){ temp[i]=nums[i]; } Arrays.sort(temp); int left=0,right=

2022-02-24 17:45:18 611

原创 2022-02-22(560. 和为 K 的子数组)

class Solution { public int subarraySum(int[] nums, int k) { int count=0; int sum=0; for(int right=0;right<nums.length;++right){ sum+=nums[right]; if(sum==k){ ++count; }

2022-02-24 16:11:24 515

原创 2022-02-21(把二叉搜索树转换为累加树)

/** * 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) { *

2022-02-24 12:48:18 153

原创 2022-02-20(494. 目标和)

class Solution { int count=0; public int findTargetSumWays(int[] nums, int target) { dfs(nums,0,target,0); return count; } void dfs(int[] nums,int index,int target,int sum){ if(index>=nums.length){ if(

2022-02-24 12:23:04 503

原创 2022-02-19(438. 找到字符串中所有字母异位词)

方法1 简单模拟:sMap存储每种情况思路就很直观,有的喜欢叫滑动窗口,我还是把这个归为简单模拟吧class Solution { Map<Character,Integer> sMap; Map<Character,Integer> pMap; public List<Integer> findAnagrams(String s, String p) { sMap =new HashMap<>();

2022-02-19 21:41:38 144

原创 2022-02-18(437. 路径总和 III)

方法1:遍历/** * 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 righ

2022-02-19 13:07:55 77

原创 2022-02-17(416. 分割等和子集)

class Solution { public boolean canPartition(int[] nums) { int n = nums.length; if (n < 2) { return false; } int sum = 0, maxNum = 0; for (int num : nums) { sum += num; maxN

2022-02-17 23:18:25 160

原创 2022-02-16(406. 根据身高重建队列)

在这里插入代码片

2022-02-17 23:01:42 149

原创 2022-02-15(399. 除法求值)

class Solution { public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) { int equationsSize = equations.size(); UnionFind unionFind = new UnionFind(2 * equationsS

2022-02-15 14:51:17 58

原创 2022-02-14(394. 字符串解码)

class Solution { public String decodeString(String s) { StringBuilder res = new StringBuilder(); int multi = 0; Stack<Integer> stack_multi = new Stack<>(); Stack<String> stack_res = new Stack<>();

2022-02-14 16:26:50 63

原创 2022-02-13(347. 前 K 个高频元素)

自己最朴实的想法就是遍历一遍,得到值和次数的map,再对map中的次数进行堆排序,或者快排得到前k大的数。官方解答和我想的一样。但看到了下面这个桶排序,其实还是以空间换时间的思路class Solution { public int[] topKFrequent(int[] nums, int k) { int[] result=new int[k]; HashMap<Integer,Integer> map=new HashMap();

2022-02-14 16:06:35 320

原创 2022-02-12(338. 比特位计数)

class Solution { public int[] countBits(int n) { int[] result=new int[n+1]; for(int i=0;i<=n;++i){ result[i]=oneCount(i); } return result; } public int oneCount(int x){ int count=0;

2022-02-14 15:15:59 118

原创 2022-02-11(337. 打家劫舍 III)

/** * 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) { *

2022-02-11 16:10:47 214

原创 2022-02-10(322. 零钱兑换)

class Solution { public int coinChange(int[] coins, int amount) { if(coins.length == 0){ return -1; } int[] dp=new int[amount+1]; dp[0]=0; for(int i=1;i<=amount;++i){ int min=Integer.MA

2022-02-11 15:27:46 187

原创 2022-02-09(312. 戳气球)

在这里插入代码片

2022-02-11 14:38:35 286

原创 2022-02-08(309. 最*佳买卖股票时机含冷冻期)

class Solution { public int maxProfit(int[] prices) { int n=prices.length; if(n==0){ return 0; } int x1=-prices[0],x2=0,x3=0; for(int i=1;i<n;++i){ int newX1=Math.max(x1,x3-prices[i]);

2022-02-08 21:53:04 267

原创 2022-02-07(301. 删除无效的括号)

class Solution { public List<String> removeInvalidParentheses(String s) { List<String> ans = new ArrayList<String>(); Set<String> currSet = new HashSet<String>(); currSet.add(s); while (tru

2022-02-08 14:52:26 309

空空如也

空空如也

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

TA关注的人

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