<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TickTick123的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TickTick123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TickTick123]]></copyright><item><title><![CDATA[【面试算法题总结18】模拟]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/126754108</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/126754108</guid><author>TickTick123</author><pubDate>Wed, 07 Sep 2022 21:18:13 +0800</pubDate><description><![CDATA[【代码】【面试算法题总结18】模拟。]]></description><category></category></item><item><title><![CDATA[【面试算法题总结17】图数据结构]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123540188</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123540188</guid><author>TickTick123</author><pubDate>Thu, 17 Mar 2022 00:17:49 +0800</pubDate><description><![CDATA[例题1：课程表 II
class Solution {
    // 存储有向图
    List&lt;List&lt;Integer&gt;&gt; edges;
    // 存储每个节点的入度
    int[] indeg;
    // 存储答案
    int[] result;
    // 答案下标
    int index;

    public int[] findOrder(int numCourses, int[][] prerequisites) {
        edge]]></description><category></category></item><item><title><![CDATA[【面试算法题总结01】输入输出处理基础]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123380180</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123380180</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:21:07 +0800</pubDate><description><![CDATA[系列说明：
【面试算法题总结】系列主要是以各个算法为单元总结常见算法题，主要题源为leetcode的《剑指offer》和《hot100》两个专题。链接如下：
剑指offer和hot100
这里简单说明一下，一道题目可能有多种解法，或者类似题目却有完全不同的解法，我每篇总结的例题并不一定用的都是标题写的算法，而是可能会拓展更多有关解法，以及类似题目。
反正最终目标就是：誓死解决写算法得过且过、缺少训练量的问题。不熟的代码就一遍一遍的写，一遍一遍的理解，直到会写为止。
面试时写算法的一点个人建议：

高效运行&]]></description><category></category></item><item><title><![CDATA[【面试算法题总结02】数组与字符串数据结构]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123380059</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123380059</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:20:34 +0800</pubDate><description><![CDATA[数组与字符串数据结构：
&nbsp;
例题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&lt;matrix.le]]></description><category></category></item><item><title><![CDATA[【面试算法题总结03】链表数据结构]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123380005</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123380005</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:18:47 +0800</pubDate><description><![CDATA[链表数据结构
画图辅助解题
&nbsp;
例题1：反转链表
解法1：循环
就画图，改变每个节点的指针方向就行了。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseLis]]></description><category></category></item><item><title><![CDATA[【面试算法题总结04】栈与队列数据结构]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379922</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379922</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:18:15 +0800</pubDate><description><![CDATA[栈与队列数据结构：
&nbsp;
例题1：用队列实现栈
解法1：双队列的题解思路
主要是一个push就调换一下队列。
class MyStack {
    Queue&lt;Integer&gt; queue1;
    Queue&lt;Integer&gt; queue2;
    /** Initialize your data structure here. */
    public MyStack() {
        queue1=new LinkedList&lt;&gt;();
   ]]></description><category></category></item><item><title><![CDATA[【面试算法题总结05】树数据结构]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379863</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379863</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:17:47 +0800</pubDate><description><![CDATA[树数据结构：
&nbsp;
例题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]]></description><category></category></item><item><title><![CDATA[【面试算法题总结06】排序算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379809</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379809</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:17:08 +0800</pubDate><description><![CDATA[排序算法：
例题1：排序数组
解法1：冒泡排序
最坏时间复杂度：O(n^2)
特定超时
class Solution {
    public int[] sortArray(int[] nums) {
        for(int i=0;i&lt;nums.length;++i){
            for(int j=i+1;j&lt;nums.length;++j){
                if(nums[i]&gt;nums[j]){
               ]]></description><category></category></item><item><title><![CDATA[【面试算法题总结07】双指针法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379531</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379531</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:16:17 +0800</pubDate><description><![CDATA[双指针法：
主要有：
1 快慢指针：主要解决链表中的问题
2 左右指针：二分搜索法（见“二分搜索法总结”）、反转数组
3 滑动窗口：快慢指针在数组（字符串）上的应用，主要解决字符串匹配的问题（见“滑动窗口总结”）
&nbsp;
例题1：环形链表
简单的方法有哈希表存储节点，但空间复杂度高。用快慢指针
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *   ]]></description><category></category></item><item><title><![CDATA[【面试算法题总结08】二分搜索算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379487</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379487</guid><author>TickTick123</author><pubDate>Thu, 10 Mar 2022 21:15:16 +0800</pubDate><description><![CDATA[二分搜索算法：
常见搜索场景：寻找一个数，寻找一个数的左侧边界，寻找一个数的右侧边界
主要问题：while是否有＝，mid的加一和减一
1 寻找一个数字：搜索区间选择双闭，故while要加＝（退出条件是left==right+1），mid+1,mid-1。这样虽然可以通过线性搜索这个数的左、右侧边界，但这样就难以保证二分搜索对数级的时间复杂度了
2 寻找一个数的左侧边界：搜索区间选择双闭，==target时right=mid-1，返回left，要检查其是否越上界
3 寻找一个数的右侧边界：搜索区间选择双闭，]]></description><category></category></item><item><title><![CDATA[【面试算法题总结09】滑动窗口算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379362</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379362</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 16:32:34 +0800</pubDate><description><![CDATA[滑动窗口算法：
&nbsp;
例题1：最小覆盖子串
这里注意一个细节：Integer值的比较一定要用.equals()方法，而不是==
class Solution {
    public String minWindow(String s, String t) {
        Map&lt;Character,Integer&gt; need=new HashMap&lt;&gt;();
        Map&lt;Character,Integer&gt; window=new HashMap&]]></description><category></category></item><item><title><![CDATA[【面试算法题总结10】广度优先搜索]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379407</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379407</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 16:32:00 +0800</pubDate><description><![CDATA[广度优先搜索：
&nbsp;
例题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]]></description><category></category></item><item><title><![CDATA[【面试算法题总结11】深度优先搜索算法（回溯算法）]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379291</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379291</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 16:31:16 +0800</pubDate><description><![CDATA[深度优先搜索算法（回溯算法）：
我的理解就是：树（递归树）的深度优先搜索，进入下一层时前做选择，从下一层回来时撤销选择
1 核心要关注 路径（已经做出的选择）、选择列表（当前可以做的选择）、结束条件（无法再做选择的条件）
2 结构上来说是：循环里面套递归，递归前先剪枝不可选择的情况后做选择，递归后撤销选择
&nbsp;
例题1：全排列
解法1：
因为要知道还没被用过的元素有哪些，比较好的办法有：利用本身给的nums数组，交换位置。
class Solution {
    List&lt;List&lt;I]]></description><category></category></item><item><title><![CDATA[【面试算法题总结12】动态规划算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379216</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379216</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 16:27:32 +0800</pubDate><description><![CDATA[动态规划算法：
动态规划算法和回溯算法很像，需要明确basecase、状态、选择。
动态规划的暴力穷举求解阶段就是回溯算法。只是有的问题可以构造最优子结构，找到重叠子问题，可以用dp table优化，将递归树大幅剪枝。
一方面，动态规划问题的一般形式就是求最值。核心是穷举，但其存在“重叠子问题”，如果暴力穷举效率会极其低下，所以需要使用dp数组来优化穷举过程，避免不必要的计算。
另一方面，动态规划问题一定会具备“最优子结构”（子问题必须相互独立），这样才能通过子问题的最值得到原问题的最值。
最后，只有列出正]]></description><category></category></item><item><title><![CDATA[【面试算法题总结13】贪心算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123380850</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123380850</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 16:26:11 +0800</pubDate><description><![CDATA[贪心算法：
&nbsp;
例题1：任务调度器
class Solution {
    public int leastInterval(char[] tasks, int n) {
        Map&lt;Character, Integer&gt; freq = new HashMap&lt;Character, Integer&gt;();
        // 最多的执行次数
        int maxExec = 0;
        for (char ch : tasks) {
  ]]></description><category></category></item><item><title><![CDATA[【面试算法题总结14】空间换时间，时间换空间算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123379078</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123379078</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 15:31:27 +0800</pubDate><description><![CDATA[空间换时间，时间换空间算法：
1 空间换时间：使用HashMap保存数据
&nbsp;
例题1：两数之和
解法1：时间优先（HashMap）
时间复杂度：O(n)
空间复杂度：O(n)
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map&lt;Integer,Integer&gt; map=new HashMap&lt;&gt;();
        for(int i=0;i&lt;nums.leng]]></description><category></category></item><item><title><![CDATA[【面试算法题总结15】位运算算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123378738</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123378738</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 15:21:30 +0800</pubDate><description><![CDATA[位运算算法：
&nbsp;
例题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)&amp;n;
        }
       ]]></description><category></category></item><item><title><![CDATA[【面试算法题总结16】数学相关算法]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123378640</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123378640</guid><author>TickTick123</author><pubDate>Wed, 09 Mar 2022 15:18:44 +0800</pubDate><description><![CDATA[数学相关算法：
&nbsp;
例题1：数值的整数次方
快速幂
n=-2147483648这个用例决定了要用long变量b。
下面(b % 2) == 1可以变成(b &amp; 1) == 1；b /=2;可以变成b &gt;&gt;= 1;
class Solution {
    public double myPow(double x, int n) {
        if(x == 0) return 0;
        long b = n;
        double res = 1.0;]]></description><category></category></item><item><title><![CDATA[2022-02-28（剑指 Offer：06）]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123190681</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123190681</guid><author>TickTick123</author><pubDate>Mon, 28 Feb 2022 20:00:00 +0800</pubDate><description><![CDATA[可以栈的思路，但这题要返回int[]，所以就没有了原本的精妙

]]></description><category></category></item><item><title><![CDATA[2022-02-27（剑指 Offer：03~05）]]></title><link>https://blog.youkuaiyun.com/TickTick123/article/details/123168184</link><guid>https://blog.youkuaiyun.com/TickTick123/article/details/123168184</guid><author>TickTick123</author><pubDate>Mon, 28 Feb 2022 19:11:59 +0800</pubDate><description><![CDATA[都算是根据题目要求进行编写即可。注意尽可能低的时间、空间复杂度即可。

]]></description><category></category></item></channel></rss>