-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
87 lines (44 loc) · 27 KB
/
atom.xml
File metadata and controls
87 lines (44 loc) · 27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Hexo</title>
<link href="https://trizzy33.github.io/atom.xml" rel="self"/>
<link href="https://trizzy33.github.io/"/>
<updated>2021-02-23T10:28:52.150Z</updated>
<id>https://trizzy33.github.io/</id>
<author>
<name>trizzy33</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>数组</title>
<link href="https://trizzy33.github.io/2021/02/21/post-1/"/>
<id>https://trizzy33.github.io/2021/02/21/post-1/</id>
<published>2021-02-22T02:53:52.000Z</published>
<updated>2021-02-23T10:28:52.150Z</updated>
<content type="html"><![CDATA[<h3 id="35-搜索插入位置"><a href="#35-搜索插入位置" class="headerlink" title="35. 搜索插入位置"></a>35. 搜索插入位置</h3><p><a href="https://leetcode-cn.com/problems/search-insert-position/">https://leetcode-cn.com/problems/search-insert-position/</a></p><h4 id="BF"><a href="#BF" class="headerlink" title="BF"></a>BF</h4><p>时间:O(n)<br>空间:O(1)</p><p>brute force初始版本,写完发现这几个条件其实是重合的,插入到最前面,找到相同的元素,在中间插入,返回的都是当前遍历的i。只要找到了就是当前i位置的元素大于等于target</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">int</span> <span class="title">searchInsert</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>>& nums, <span class="keyword">int</span> target)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> flag = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span>(nums.size() == <span class="number">0</span> || target < nums.at(<span class="number">0</span>)) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < nums.size() && flag == <span class="number">0</span>; i++){</span><br><span class="line"> <span class="keyword">if</span>(target >= nums.at(i)){</span><br><span class="line"> <span class="keyword">if</span>(target == nums.at(i)){</span><br><span class="line"> ans = i;</span><br><span class="line"> flag = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> ans = i;</span><br><span class="line"> flag = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(flag == <span class="number">0</span>) ans = nums.size();</span><br><span class="line"> <span class="keyword">return</span> ans;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><p>可以写成这样</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">int</span> <span class="title">searchInsert</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>>& nums, <span class="keyword">int</span> target)</span> </span>{</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < nums.size(); i++){</span><br><span class="line"> <span class="keyword">if</span>(target <= nums.at(i)){</span><br><span class="line"> <span class="keyword">return</span> i;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> nums.size();</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><h4 id="二分法"><a href="#二分法" class="headerlink" title="二分法"></a>二分法</h4><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">int</span> <span class="title">searchInsert</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>>& nums, <span class="keyword">int</span> target)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> left = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> right = nums.size() - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">int</span> midindex = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">int</span> mid = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span>(left <= right){</span><br><span class="line"> midindex = (left + right) / <span class="number">2</span>;</span><br><span class="line"> mid = nums.at(midindex);</span><br><span class="line"> <span class="keyword">if</span>(target < mid) right = midindex - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(target > mid) left = midindex + <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> midindex;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> right + <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><p>时间:O(logn)<br>空间:O(1)</p><h3 id="27-移除元素"><a href="#27-移除元素" class="headerlink" title="27. 移除元素"></a>27. 移除元素</h3><p><a href="https://leetcode-cn.com/problems/remove-element/">https://leetcode-cn.com/problems/remove-element/</a></p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">int</span> <span class="title">removeElement</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>>& nums, <span class="keyword">int</span> val)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> end = nums.size() - <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < nums.size(); i++){</span><br><span class="line"> <span class="keyword">if</span>(val == nums.at(i)){</span><br><span class="line"> <span class="keyword">while</span>(nums.at(end) == val && end > <span class="number">0</span>){</span><br><span class="line"> nums.at(end) = <span class="number">0</span>;</span><br><span class="line"> end --;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(end >= i) {</span><br><span class="line"> nums.at(i) = nums.at(end);</span><br><span class="line"> nums.at(end) = <span class="number">0</span>;</span><br><span class="line"> end --;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> end + <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><p>看了一下题解有这个双指针方法,就是在碰到不删除的值的时候slow 跟 fast指针一起移动并且交换值,需要删除的值则slow不动,移动fast,等到碰到下一个正常值,fast将会跟slow交换。</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 时间复杂度:O(n)</span></span><br><span class="line"><span class="comment">// 空间复杂度:O(1)</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">int</span> <span class="title">removeElement</span><span class="params">(<span class="built_in">vector</span><<span class="keyword">int</span>>& nums, <span class="keyword">int</span> val)</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> slowIndex = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> fastIndex = <span class="number">0</span>; fastIndex < nums.size(); fastIndex++) { </span><br><span class="line"> <span class="keyword">if</span> (val != nums[fastIndex]) {</span><br><span class="line"> nums[slowIndex++] = nums[fastIndex];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> slowIndex;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><h3 id="209-长度最小的子数组"><a href="#209-长度最小的子数组" class="headerlink" title="209. 长度最小的子数组"></a>209. 长度最小的子数组</h3><p><a href="https://leetcode-cn.com/problems/minimum-size-subarray-sum/">https://leetcode-cn.com/problems/minimum-size-subarray-sum/</a></p>]]></content>
<summary type="html"><h3 id="35-搜索插入位置"><a href="#35-搜索插入位置" class="headerlink" title="35. 搜索插入位置"></a>35. 搜索插入位置</h3><p><a href="https://leetcode-cn.com/problem</summary>
<category term="leetcode" scheme="https://trizzy33.github.io/tags/leetcode/"/>
</entry>
<entry>
<title>101.symmetric binary tree</title>
<link href="https://trizzy33.github.io/2021/01/14/tree/"/>
<id>https://trizzy33.github.io/2021/01/14/tree/</id>
<published>2021-01-15T00:39:46.000Z</published>
<updated>2021-01-14T11:42:34.495Z</updated>
<content type="html"><![CDATA[<h3 id="Recursive-Method"><a href="#Recursive-Method" class="headerlink" title="Recursive Method"></a>Recursive Method</h3><p>一开始想比较每个节点的左子树和右子树,然后发现这样比较并不对,仍然返回对称的结果。看了一下解析,是要比较root的两个子树,里外是不是对称的,里面比较left->right, right->left, 相对的外边就是right->right, left->left。</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for a binary tree node.</span></span><br><span class="line"><span class="comment"> * struct TreeNode {</span></span><br><span class="line"><span class="comment"> * int val;</span></span><br><span class="line"><span class="comment"> * TreeNode *left;</span></span><br><span class="line"><span class="comment"> * TreeNode *right;</span></span><br><span class="line"><span class="comment"> * TreeNode(int x) : val(x), left(NULL), right(NULL) {}</span></span><br><span class="line"><span class="comment"> * };</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">bool</span> <span class="title">isSymmetric</span><span class="params">(TreeNode* root)</span> </span>{</span><br><span class="line"> <span class="comment">//recursive method</span></span><br><span class="line"> <span class="keyword">if</span>(root == <span class="literal">NULL</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">return</span> helper(root->right, root->left);</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">bool</span> <span class="title">helper</span><span class="params">(TreeNode* right, TreeNode* left)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span>(right == <span class="literal">NULL</span> && left == <span class="literal">NULL</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(right != <span class="literal">NULL</span> && left == <span class="literal">NULL</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(right == <span class="literal">NULL</span> && left != <span class="literal">NULL</span>) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(right->val != left->val) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">bool</span> outside = helper(right->right, left->left);</span><br><span class="line"> <span class="keyword">bool</span> inside = helper(right->left, left->right);</span><br><span class="line"> <span class="keyword">bool</span> sym = outside && inside;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> sym;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure><h3 id="Iterative-Method"><a href="#Iterative-Method" class="headerlink" title="Iterative Method"></a>Iterative Method</h3><p>用queue每次推入里侧外侧的四个节点,不为空的时候一直循环,跟递归不同的是检测到都为NULL的时候不做任何操作,因为只返回一次,要是写了return true结果就直接为true了。</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for a binary tree node.</span></span><br><span class="line"><span class="comment"> * struct TreeNode {</span></span><br><span class="line"><span class="comment"> * int val;</span></span><br><span class="line"><span class="comment"> * TreeNode *left;</span></span><br><span class="line"><span class="comment"> * TreeNode *right;</span></span><br><span class="line"><span class="comment"> * TreeNode(int x) : val(x), left(NULL), right(NULL) {}</span></span><br><span class="line"><span class="comment"> * };</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="function"><span class="keyword">bool</span> <span class="title">isSymmetric</span><span class="params">(TreeNode* root)</span> </span>{</span><br><span class="line"> <span class="comment">//iterative method</span></span><br><span class="line"> <span class="keyword">if</span>(root == <span class="literal">NULL</span>) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> <span class="built_in">queue</span><TreeNode*> qe;</span><br><span class="line"> qe.push(root->left);</span><br><span class="line"> qe.push(root->right);</span><br><span class="line"> <span class="keyword">while</span>(!qe.empty()){</span><br><span class="line"> TreeNode* left = qe.front();</span><br><span class="line"> qe.pop();</span><br><span class="line"> TreeNode* right = qe.front();</span><br><span class="line"> qe.pop();</span><br><span class="line"> <span class="keyword">if</span>((left == <span class="literal">NULL</span> && right != <span class="literal">NULL</span>) || (left != <span class="literal">NULL</span> && right == <span class="literal">NULL</span>)) <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(right == <span class="literal">NULL</span> && left == <span class="literal">NULL</span>);</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(left != <span class="literal">NULL</span> && right != <span class="literal">NULL</span> && right->val == left->val){</span><br><span class="line"> <span class="comment">//compare outside</span></span><br><span class="line"> qe.push(left->left);</span><br><span class="line"> qe.push(right->right);</span><br><span class="line"> <span class="comment">//compare inside</span></span><br><span class="line"> qe.push(left->right);</span><br><span class="line"> qe.push(right->left);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line">};</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><h3 id="Recursive-Method"><a href="#Recursive-Method" class="headerlink" title="Recursive Method"></a>Recursive Method</h3><p>一开始想比较每个节点的左子树</summary>
<category term="leetcode" scheme="https://trizzy33.github.io/tags/leetcode/"/>
</entry>
<entry>
<title>笔记</title>
<link href="https://trizzy33.github.io/2021/01/07/note/"/>
<id>https://trizzy33.github.io/2021/01/07/note/</id>
<published>2021-01-08T00:32:12.000Z</published>
<updated>2021-01-14T11:42:25.142Z</updated>
<content type="html"><![CDATA[<h2 id="数组"><a href="#数组" class="headerlink" title="数组"></a>数组</h2><ul><li>连续,fix sized</li><li>存储的都是相同type的数据<br>内存部分是连续的,lowest address是第一个数据,highest address则是最后一个数据.每次在插入和删除的时候都需要整段整段的改变。</li><li>Complexity</li></ul><table><thead><tr><th>Access</th><th>Search</th><th>Insertion</th><th>Deletion</th></tr></thead><tbody><tr><td>Θ(1)</td><td>Θ(n)</td><td>Θ(n)</td><td>Θ(n)</td></tr></tbody></table><blockquote><p>declare <code>type arrayName [ arraySize ];</code></p></blockquote><blockquote><p>example <code>char a1[5];</code></p></blockquote><h2 id="Map"><a href="#Map" class="headerlink" title="Map"></a>Map</h2><h2 id="Unordered-Map"><a href="#Unordered-Map" class="headerlink" title="Unordered Map"></a>Unordered Map</h2><p>和Map不同,实现结构是hash map,普通的map则是红黑树</p><h4 id="function"><a href="#function" class="headerlink" title="function"></a>function</h4><blockquote><p>init<br> <code>unordered_map<int, int> mp;</code></p></blockquote><blockquote><p>count <code>map.count(key)</code> 返回0或者1,因为key是unique的</p></blockquote><h2 id="红黑树"><a href="#红黑树" class="headerlink" title="红黑树"></a>红黑树</h2>]]></content>
<summary type="html"><h2 id="数组"><a href="#数组" class="headerlink" title="数组"></a>数组</h2><ul>
<li>连续,fix sized</li>
<li>存储的都是相同type的数据<br>内存部分是连续的,lowest address是</summary>
<category term="数据结构" scheme="https://trizzy33.github.io/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
</entry>
</feed>