<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wusutata的专栏]]></title><description><![CDATA[努力吧]]></description><link>https://blog.youkuaiyun.com/wusutata</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wusutata]]></copyright><item><title><![CDATA[leetcode Letter Case Permutation]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/89109943</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/89109943</guid><author>wusutata</author><pubDate>Mon, 08 Apr 2019 21:38:35 +0800</pubDate><description><![CDATA[最朴素的回溯：


class Solution {
public:
    vector&lt;string&gt; letterCasePermutation(string S) {
        string tmp = "";
        vector&lt;string&gt; ans;
        LetterCase(0, S, ans, tmp);
        re...]]></description><category></category></item><item><title><![CDATA[leetcode  Trapping Rain Water]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88890492</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88890492</guid><author>wusutata</author><pubDate>Fri, 29 Mar 2019 13:24:25 +0800</pubDate><description><![CDATA[AC代码
时间复杂度为O(n)，空间复杂度为O(1)。只用了i,j,k三个变量作为指针。

思路是：设置两个指针i,j，i指向左边的第一个高大于0的柱子，j指向右边第一个高大于0的柱子。然后，选择这两课柱子中较矮的那个（若两者相等，则选择i），从这个位置开始直到其后（或者其前）的第一个大于它的高度的柱子之间，统计这段区间内的面积。
如这里第一次循环时选择i，则i向右移动到第二个黑色柱子处停下（此时...]]></description><category></category></item><item><title><![CDATA[leetcode Third Maximum Number]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88858316</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88858316</guid><author>wusutata</author><pubDate>Thu, 28 Mar 2019 09:34:10 +0800</pubDate><description><![CDATA[如何求无序数组中最大的k个数系列1

这道题是求数组中第三大的数。

方法一：C++的set容器的特点是内部自动有序且不包含重复元素。本题可以保持一个大小为3的set容器。每次向set中添加元素，添加完后若元素个数大于3，则从set中删除最小的元素。保留的永远是数组当前最大的3个元素。

AC代码


class Solution {
public:
    int thirdMax(vecto...]]></description><category></category></item><item><title><![CDATA[LeetCode. Two Sum系列之IV - Input is a BST]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88821743</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88821743</guid><author>wusutata</author><pubDate>Tue, 26 Mar 2019 16:18:27 +0800</pubDate><description><![CDATA[解法一：使用HashSet,在中序遍历树的同时，判断是否在HashSet中已经存在一个值和当前根节点的值相加可以满足等于target。

c++版本：


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *rig...]]></description><category></category></item><item><title><![CDATA[LeetCode. Two Sum系列]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88818536</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88818536</guid><author>wusutata</author><pubDate>Tue, 26 Mar 2019 15:14:15 +0800</pubDate><description><![CDATA[1. Two Sum

三种解法，第一种是暴力破解，时间复杂度为O(n^2)。第二种是使用HashMap，第三种也是使用HashMap，是在第二种基础上的优先，这里只记录第二种和第三种。

第二种解法JAVA版本


class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map&lt;Integer, ...]]></description><category></category></item><item><title><![CDATA[392. Is Subsequence]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88803997</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88803997</guid><author>wusutata</author><pubDate>Mon, 25 Mar 2019 19:39:11 +0800</pubDate><description><![CDATA[这道题是给出两个字符串，求第一个字符串s是否是第二个字符串t的子序列。即字符串s中每个字符在字符串t都出现过，且相对顺序不变，但是可能不连续。

AC代码如下：

思路：依次检查s中每个字符是否都在字符串t中，如果在就继续在字符串t中向后找s中的下一个字符。

如果已经遍历了字符串t中的每一个字符还没有找完字符串s，则说明s不是t的子序列。


class Solution {
public:
...]]></description><category></category></item><item><title><![CDATA[LeetCode  Remove Duplicates from Sorted Array]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88803421</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88803421</guid><author>wusutata</author><pubDate>Mon, 25 Mar 2019 19:11:27 +0800</pubDate><description><![CDATA[这一系列有几道题，这一题是其中最简单的那道。但是掌握了解题的思想就会发现都是一样的解法。

设定两个指针i和j，其中i指向新数组的最后一个元素（也就是说i及其之前的元素都是不重复的元素），而j指向当前正在判断是否加入新数组中的元素（也就是说j前面的元素都已经加入确定了是加入原数组中，还是丢弃）。

如果出现了nums[i]==nums[j]，说明出现重复，就丢弃nums[j]，直接指针后移，否则将...]]></description><category></category></item><item><title><![CDATA[LeetCode  Daily Temperatures]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88542319</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88542319</guid><author>wusutata</author><pubDate>Wed, 13 Mar 2019 22:18:34 +0800</pubDate><description><![CDATA[思路：从后往前遍历数组。

原数组用T表示。设置一个可变数组ans保存结果，用于保存每一天为了等到一个比这天更暖和的天（即找到一个比这个数更大的数）应该等待的天数。数组下标从0到n-1,n表示数组中总的元素个数。对于数组中的最后一个数，毫无疑问，ans[n-1]=0；对于剩下的每一个数则有几种情况。

第一种情况是最简单的，就是对于数组中的第i个数而言，位于其后的第i+1个大于它即T[i]&amp;lt;...]]></description><category></category></item><item><title><![CDATA[Insertion Sort List]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88224669</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88224669</guid><author>wusutata</author><pubDate>Wed, 06 Mar 2019 11:12:49 +0800</pubDate><description><![CDATA[AC代码1


class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        if(head==NULL || head-&amp;gt;next==NULL)
                return head;
            ListNode* pCur = head;
       ...]]></description><category></category></item><item><title><![CDATA[C++ vector基础知识]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88142632</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88142632</guid><author>wusutata</author><pubDate>Mon, 04 Mar 2019 22:15:33 +0800</pubDate><description><![CDATA[vector中在头部插入一个元素。如下代码所示：


	vector&amp;lt;int&amp;gt; a(3, 2);	
	vector&amp;lt;int&amp;gt;::iterator it;
	it = a.begin();
	a.insert(it, 100);
	for(int i=0;i&amp;lt;a.size();i++)
		cout&amp;lt;&amp;lt;a[i]&amp;lt;&amp;lt;&quot; &quot;;
	cout&amp;lt;&amp;...]]></description><category></category></item><item><title><![CDATA[LeetCode  Remove Duplicates from Sorted List II]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88081471</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88081471</guid><author>wusutata</author><pubDate>Sat, 02 Mar 2019 21:36:15 +0800</pubDate><description><![CDATA[思路：这道题可以添加一个额外的结点作为头结点，头结点中不存储数据，只作为第一个结点。这里采用的是未使用额外头结点的解法。

保持三个指针，p, q, cur,这三个指针分别指向三个相邻结点， p是q的前驱，cur是q的后继。

初始化时p=NULL, q = head, cur =head-&amp;gt;nex。若q-&amp;gt;val!=cur-&amp;gt;val，即q指向的结点的val和cur指向的节点的...]]></description><category></category></item><item><title><![CDATA[leetcode  Partition List]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88076424</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88076424</guid><author>wusutata</author><pubDate>Sat, 02 Mar 2019 15:26:44 +0800</pubDate><description><![CDATA[思路：思路是受了快排中将数组通过一个主元分成两部分的思路启发。因此，保存两个指针p1和p2，p1指向当前最后一个值小于x的结点，p2指向当前正在检查的结点，处于head指针和p1（包括p1指针指向的结点）之内的所有结点都满足值小于x，处于p1的后继结点（p1-&amp;gt;next指向的结点）和p2的前驱结点（该结点的next指向p2）之间的所有结点的值大于等于x，如果p2的值大于等于x，则让p2指向其...]]></description><category></category></item><item><title><![CDATA[Leetcode Reverse Linked List]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/88051155</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/88051155</guid><author>wusutata</author><pubDate>Fri, 01 Mar 2019 11:11:00 +0800</pubDate><description><![CDATA[思路：逆转一个链表，分别考虑链表为空，链表有1个结点，链表有&amp;gt;=2个结点。

若为前两种情况，可直接返回。若链表中有&amp;gt;=2结点。则一次从头结点开始逆转每个结点的next指针。从头结点开始，需要逆转头结点指向第2个结点的next指针，必须保存是三个指针，这三个指针分别指向头结点，第2个结点，第三个结点（如果第三个结点存在的话）。这样需要逆转头结点指向第2个结点的指针，只需要修改指向第2个...]]></description><category></category></item><item><title><![CDATA[leetcode Validate Binary Search Tree]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/87994042</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/87994042</guid><author>wusutata</author><pubDate>Wed, 27 Feb 2019 22:28:29 +0800</pubDate><description><![CDATA[AC代码一


class Solution {
public:

bool isValidBST(TreeNode* root) {
	if(root==NULL)
		return true;
	if(root-&amp;gt;left==NULL &amp;amp;&amp;amp; root-&amp;gt;right==NULL)
		return true;
    bool lflag = isValidBST(...]]></description><category></category></item><item><title><![CDATA[python list 方法]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/87986052</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/87986052</guid><author>wusutata</author><pubDate>Wed, 27 Feb 2019 19:39:46 +0800</pubDate><description><![CDATA[有三种方法可以从list中删除元素，用法各有不同。

list 的pop()方法从list的尾部删除元素。如下例。



list的remove(item)方法从list中删除指定的元素，如果在list中存在多个相同元素，则删除索引最小的那个。必须传入一个参数，指定要删除的元素。



pop()和remove()为list的方法。而del则不是。

del 函数从list中删除元素。当使用del...]]></description><category></category></item><item><title><![CDATA[123. Best Time to Buy and Sell Stock III]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/87923903</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/87923903</guid><author>wusutata</author><pubDate>Mon, 25 Feb 2019 20:36:23 +0800</pubDate><description><![CDATA[AC代码


class Solution {
public:
    int maxProfit(vector&amp;lt;int&amp;gt;&amp;amp; prices) {
       	if(prices.size()&amp;lt;=1)
            return 0;
        int i,k;
        vector&amp;lt;int&amp;gt; arr,ans;
        for...]]></description><category></category></item><item><title><![CDATA[C++ 引用与指针]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/86547123</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/86547123</guid><author>wusutata</author><pubDate>Fri, 18 Jan 2019 21:59:25 +0800</pubDate><description><![CDATA[引用

什么是引用呢？

引用是变量的别名，是指向变量的常量指针。


#include&amp;lt;iostream&amp;gt;
using namespace std;
​
int main(void)
{
    int i = 10;
    int &amp;amp;r = i;
    cout&amp;lt;&amp;lt;&quot;i=&quot;&amp;lt;&amp;lt;i&amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt;&quot;r]]></description><category></category></item><item><title><![CDATA[几个java实现的PV操作经典例子：读者写者、贪睡的理发师、生产者消费者]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/86546105</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/86546105</guid><author>wusutata</author><pubDate>Fri, 18 Jan 2019 20:41:55 +0800</pubDate><description><![CDATA[其中读者写者和贪睡的理发师使用的Semaphore类；生产者消费者使用的是管程。

读者写者：


class Semaphore
{
    int value;

    public Semaphore(int v)
    {
        this.value = v;
    }

    public synchronized void p()
    {
        valu...]]></description><category></category></item><item><title><![CDATA[python3 dict按照字典的键或值排序]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/82717152</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/82717152</guid><author>wusutata</author><pubDate>Sat, 15 Sep 2018 20:10:06 +0800</pubDate><description><![CDATA[ 下面是一段实例代码。



运行结果：



对字典使用sorted函数进行排序的结果是一个列表。列表中的每个元素是一个元组。

 

从以上代码的运行结果可以看出：通过使用匿名函数或者operator模块的itemgetter函数可以指定一个比较的关键字。

关于operator.itemgetter


import operator
a = [11, 22, 33, 44]
f = ope...]]></description><category></category></item><item><title><![CDATA[启动elasticsearch]]></title><link>https://blog.youkuaiyun.com/wusutata/article/details/81388907</link><guid>https://blog.youkuaiyun.com/wusutata/article/details/81388907</guid><author>wusutata</author><pubDate>Fri, 03 Aug 2018 15:43:18 +0800</pubDate><description><![CDATA[使用elasticsearch时，同时启动kibana和head插件。

什么是kibana
以下是我从网上找到的对kibana的介绍。



但是对我来说，使用kibana主要是因为与【它可以提供与Elasticsearch REST API实现可视化交互】可以在kibana面板中输入查询语言，方便地操作elasticsearch索引。



启动elasticsearch
我的elastics...]]></description><category></category></item></channel></rss>