<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Linke66的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Linke66</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Linke66]]></copyright><item><title><![CDATA[C++秋招经验贴]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/127653350</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/127653350</guid><author>Linke66</author><pubDate>Wed, 02 Nov 2022 21:04:59 +0800</pubDate><description><![CDATA[秋招经验贴]]></description><category></category></item><item><title><![CDATA[操作系统知识回顾（更新中，自用）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/126484438</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/126484438</guid><author>Linke66</author><pubDate>Tue, 23 Aug 2022 15:52:49 +0800</pubDate><description><![CDATA[面向面试，整理的操作系统相关的基础知识]]></description><category></category></item><item><title><![CDATA[求数组所有非空子序列的和]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/126451695</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/126451695</guid><author>Linke66</author><pubDate>Sun, 21 Aug 2022 15:52:05 +0800</pubDate><description><![CDATA[数组所有非空子序列的和]]></description><category></category></item><item><title><![CDATA[软件测试开发从0到1（自用，更新中）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/126196177</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/126196177</guid><author>Linke66</author><pubDate>Sat, 06 Aug 2022 20:41:45 +0800</pubDate><description><![CDATA[软件测试开发从0到1]]></description><category></category></item><item><title><![CDATA[C++、操作系统、计算机网络等需要巩固的知识点（自用，更新中）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/126039977</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/126039977</guid><author>Linke66</author><pubDate>Thu, 28 Jul 2022 19:41:29 +0800</pubDate><description><![CDATA[面试C++、操作系统、计算机网络、网络编程、设计模式等需要巩固的知识点的整理。（自用的）]]></description><category></category></item><item><title><![CDATA[海量号码需要保存，如何才能尽可能少地占用内存？]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/125978018</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/125978018</guid><author>Linke66</author><pubDate>Mon, 25 Jul 2022 16:44:54 +0800</pubDate><description><![CDATA[面试场景题]]></description><category></category></item><item><title><![CDATA[面试前需要巩固的算法知识点（自用，更新中）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/125843096</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/125843096</guid><author>Linke66</author><pubDate>Mon, 18 Jul 2022 20:33:37 +0800</pubDate><description><![CDATA[数据结构与算法相关面试知识点]]></description><category></category></item><item><title><![CDATA[646.最长数对链（动态规划）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121545127</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121545127</guid><author>Linke66</author><pubDate>Thu, 25 Nov 2021 19:26:20 +0800</pubDate><description><![CDATA[解题思路：
动态规划（最长升序子序列变体）
dp[i]表示到索引为i的这个元素为止，有多少个满足要求的数对，即第一个元素大于前一个元素的第二个元素。
动态转移方程
if(pairs[i][0]&gt;pairs[j][1]){
                    dp[i]=max(dp[i],dp[j]+1);

但是由于给的数组是无序的，因此需要首先对数组作处理。
首先数组按照第二个元素的升序排列，而不是按第一个元素的升序排列，原因是前者能够为后面留下更多的空间。
sort(pairs.begi..]]></description><category></category></item><item><title><![CDATA[131.分割回文串]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121500671</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121500671</guid><author>Linke66</author><pubDate>Tue, 23 Nov 2021 19:33:52 +0800</pubDate><description><![CDATA[解题思路：
使用深度优先搜索，一旦搜索到回文字符串，那么就进入递归，并且递归中从上一次搜索的下一个位置开始搜索。具体见代码。
class Solution {
    vector&lt;vector&lt;string&gt;&gt; ret;
public:
    //判断是否是回文字符串
    bool calc(const string&amp; s){
        int i=0,j=s.size()-1;
        while(i&lt;j){
            if(s..]]></description><category></category></item><item><title><![CDATA[384.打乱数组]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121478589</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121478589</guid><author>Linke66</author><pubDate>Mon, 22 Nov 2021 19:40:00 +0800</pubDate><description><![CDATA[解题思路：
用一个辅助数组vec，大小与传入数组一样，并且元素是生成的随机数。使得vec按照升序排序，并且原始数组也按照其排序方法排序。通过这种方式来随机打乱数组。
举个例子：
nums [2,3,1]    vec [10,6,30]
那么vec按升序排序就是vec[0]和vec[1]交换，那么nums[0]和nums[1]也交换。所以
nums [3,2,1]    vec [6,10,30]
具体代码如下
class Solution {
    vector&lt;int&gt; m_nums;..]]></description><category></category></item><item><title><![CDATA[934.最短的桥（广度优先搜索）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121088260</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121088260</guid><author>Linke66</author><pubDate>Mon, 01 Nov 2021 21:05:02 +0800</pubDate><description><![CDATA[解题思路
方法1：暴力法
使用深度优先搜索，讲两个岛屿的坐标存储到两个数组中，然后用两个for遍历数组，找到最小置。
很暴力，时间和空间复杂度也很高。
class Solution {
public:
    int shortestBridge(vector&lt;vector&lt;int&gt;&gt;&amp; grid) {
        int m=grid.size(),n=grid[0].size();
        vector&lt;vector&lt;bool&gt;&gt;vi.]]></description><category></category></item><item><title><![CDATA[51.N皇后（回溯法）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121086682</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121086682</guid><author>Linke66</author><pubDate>Mon, 01 Nov 2021 19:35:09 +0800</pubDate><description><![CDATA[解题思路：
回溯法
主函数
初始化一个全为’.'的二维数组，哪个位置可以放置皇后棋子，修改为’Q’即可。
axis数组用来存放已经放置棋子的坐标。
    //主函数
    vector&lt;vector&lt;string&gt;&gt; solveNQueens(int n) {
        vector&lt;vector&lt;string&gt;&gt;ans;
        vector&lt;string&gt;board(n,string(n,'.'));
        ve..]]></description><category></category></item><item><title><![CDATA[417.太平洋大西洋水流问题]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/121069070</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/121069070</guid><author>Linke66</author><pubDate>Sun, 31 Oct 2021 20:12:01 +0800</pubDate><description><![CDATA[解题思路：
一开始自己的思路是看每一个点是否能流到太平洋和大西洋，很复杂，各种细节考虑不到。看了题解觉得这个方法很好，记录一下。
我们从四个边开始往高处走，能走到的位置就是能流到对应边旁边的洋流。
can_reach_p，（太平洋 pacific）代表能到达太平洋；
can_reach_a，（大西洋 atlantic）代表能到达大西洋。
假如某个点的can_reach_p和can_reach_a都为true，说明符合条件。
具体思路看代码。
class Solution {
public:
    vec.]]></description><category></category></item><item><title><![CDATA[240.搜索二维矩阵II]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120961932</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120961932</guid><author>Linke66</author><pubDate>Mon, 25 Oct 2021 22:24:55 +0800</pubDate><description><![CDATA[解题思路
看到两个关键词，有序+寻找目标值，很自然的想到二分查找。
当二维数组中的某一行首元素&lt;=target，并且尾元素&gt;=target 时，那么target可能在这一行。
因此，首先寻找所有可能有target的行，保存在数组中。
接下来对这些行，进行二分查找，找到就返回true，没找到就对下一个符合条件的行进行二分查找。
假如最后都没有找到target，那就是matrix二维数组中不存在target，返回false。
class Solution {
public:
    bool b_.]]></description><category></category></item><item><title><![CDATA[81.搜索旋转排序数组II（数组旋转后二分查找）]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120896079</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120896079</guid><author>Linke66</author><pubDate>Thu, 21 Oct 2021 22:11:12 +0800</pubDate><description><![CDATA[记录一下：
if(nums[left]==nums[mid]){
                //无法判断哪个区间是升序的
                ++left;
            }

假如是上面这种情况，反正是寻找有无target，两个元素相等，直接让left往右移动一个，直到能够判断左边还是右边是升序！
class Solution {
public:
    bool search(vector&lt;int&gt;&amp; nums, int target) {
      .]]></description><category></category></item><item><title><![CDATA[524.通过删除字母匹配到字典里最长单词]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120894386</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120894386</guid><author>Linke66</author><pubDate>Thu, 21 Oct 2021 20:38:34 +0800</pubDate><description><![CDATA[思路：
因为要找长度最长且字母序最小的字符串。
因此先对dictionary进行排序，按字符串长度降序，假如长度相同就按字母序，即默认的string排序即可。
接下来遍历dictionary每一个string元素，记为dic，看是否满足要求。
辅助函数，判断dic是否是s的子串：
假如dic长度大于s，那么必然不可能由s删除字符得到dic，返回false；
否则就用双指针的方法，判断即可，具体流程见代码。
class Solution {
public:
    bool help(const stri..]]></description><category></category></item><item><title><![CDATA[665.非递减数列]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120875140</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120875140</guid><author>Linke66</author><pubDate>Wed, 20 Oct 2021 21:13:42 +0800</pubDate><description><![CDATA[思路：
初始化一个bool类型的变量flag，true表示改动的次数未用，false表示改动的次数用掉了。
先看一下前两个元素是否满足非递减要求，不满足flag初始化为false。
从nums[1]开始，每次和后面一个元素比较，假如不满足非递减，就选择下面两种情况中的一个改变元素：
1 [3,5,4,6]  5&gt;4且4&gt;3，那么要把5变成4；即i=1，nums[i+1]&gt;=nums[i-1]; nums[i]=nums[i+1];
2 [5,6,3,7] 6&gt;3且3&lt;5，那..]]></description><category></category></item><item><title><![CDATA[406.根据身高重建队列]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120874231</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120874231</guid><author>Linke66</author><pubDate>Wed, 20 Oct 2021 20:24:36 +0800</pubDate><description><![CDATA[思路：
按身高降序排列，假如身高一样就按升序排列。
接下来，创建一个数组ret保存结果，遍历people数组；people第二个元素的值就是该people要插入数组ret中的位置，因为身高是按降序排列，而身高相同则按k升序排列，因此一定不会影响到后面的元素，如下图所示。

class Solution {
public:
    vector&lt;vector&lt;int&gt;&gt; reconstructQueue(vector&lt;vector&lt;int&gt;&gt;&amp; peo.]]></description><category></category></item><item><title><![CDATA[453.最小操作数使数组元素相等]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120873759</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120873759</guid><author>Linke66</author><pubDate>Wed, 20 Oct 2021 19:56:28 +0800</pubDate><description><![CDATA[关键：
让n-1个元素加1，就相当于选一个元素-1；
选n-1个元素加1，加到所有元素相等，就相当于选1个元素减1，减到所有的元素都等于最小元素。
class Solution {
public:
    int minMoves(vector&lt;int&gt;&amp; nums) {
        //得到nums中的最小元素
        int min_val=INT_MAX;
        for(auto num:nums)
        {
            min_va..]]></description><category></category></item><item><title><![CDATA[union中有struct的情况-从内存分析]]></title><link>https://blog.youkuaiyun.com/Linke66/article/details/120529681</link><guid>https://blog.youkuaiyun.com/Linke66/article/details/120529681</guid><author>Linke66</author><pubDate>Tue, 28 Sep 2021 15:24:13 +0800</pubDate><description><![CDATA[union中的每个成员共用一块内存，且首地址相同；
这块内存必须大于等于union中最大成员的字节数。
举个例子：
union U中有两个成员，
一个是int型的a，4个字节；
一个是结构体STU，考虑对齐，16个字节。
struct STU {
	int b;
	long long c;
};

union U{
	int a;
	STU stu;
};

首先使用结构体初始化union U，查看其内存分布情况：
U u;
	STU m_stu;
	m_stu.b = 6;
	m_stu.c = 66;
]]></description><category></category></item></channel></rss>