0%

两数组的中值

题目地址:Go to LeetCode

题意

求两个有序数组中间位置的数,两个数组长度和为偶数个时中间数求平均。
(哇,这题理解起来还是挺简单的,就是要做到O(m+n)有点麻烦了。)

解题思路

  1. 归并排序(O(m+n))
    两个有序数组合并排序,这是归并排序算法的一部分。

普 通 思 路。然而我这个想法就一闪而过就没了。Orz,还去用插排了,做了半天看起来判断太多太丑了,后面直接删了。然后看了下题解,自己写了遍。(扶额

  1. 二分查找(O(m,n))
    二分查找一个数组还算简单,这两个数组就有点晕了。思路的话 LeetCode 上有的,虽然是英文的,但是我没准备汉化一遍。(反正我这也没人看,略略略~

还是要多做做题,不然都忘光了。脑子已经锈实了。

I Love This Game

地址:I Love This Game

题意

NBA技巧大赛,给出一组球员及完成时间,求排名,相同时间排名相同,先按时间优先排序然后球员姓名字典序

解题思路

比较优先级mm > ss > name,然后对排序后数组逐个判断时间是否有相同的,相同则打印排名,否则排名等于下标+1

今天公司网有点烂,LeetCode加载太慢了,就翻了下杭电。看看当初懒懒的就做了那么十几题,还有一题WA的(就这题。),于是重新弄了下环境(VSCode + TDM-GCC),折腾了好久,然后终于可以弄代码了,发现之前代码里少了个+1。=_=,可能是那时候改好了忘提交了吧。

win下普通g++环境用TDM-GCC就好了,体积比CygwinMingw要小得多。VSCode配置文件见,Algorithm仓库.vscode文件夹。

因为不想把这题混到LeetCode的里面,所以新建了分类、仓库

字符串内无重复字母的最长子串

题目地址:Go to LeetCode

解题思路:

字符串都是 “字符” 串,那就逐个 字符 来考虑比较呗。

定义:

  • 目标串:字符串内无重复字母的最长子串
  • 当前最大目标串长度:l
  • 最大目标串长度:lmax

解题步骤:

  1. 设定i为目标串第一个字符下标,逐个字符遍历
  2. 比较当前字符在前面是否存在,是则i设置为已存在字符的下标+1(即要包含后面的字符,且不重复,只能舍弃前面的了,后面比较就从这里开始),否则当前最大目标串长度l + 1
  3. 直到比较完当前字符前所有字符,若l > lmax,则lmax = l

Java啊什么的,各种框架用多了,总想着整体设计,但在这里这种思维可能会有点碍事。不要总想着从整体的串上来看,这样要找个这样的子串,要怎么比较呢,太麻烦了。

记得当初上数据结构的时候有一个字符串匹配算法(KMP),然后ACM里有一系列的题,我博客园还有以前的记录,那个记得是要麻烦很多的。

这题一次Ac,还算简单。倒是写这个记录写了半天= =b。嘛,太久不动脑子了,一次Ac还是蛮开心的ヽ( ̄▽ ̄)ノ

修改背景步骤

  • 添加背景图片,到路径next->source->images
  • 修改NexT自定义样式文件:next->source->css->_custom->custom.styl
  • 添加样式代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    body {
    background-image: url("/images/background.png");
    background-attachment: fixed; /*不随页面移动*/
    background-repeat: no-repeat; /*不重复*/
    background-position: 50% 50%; /*居中*/
    background-size:cover;
    }
    /*内容半透明背景*/
    .header-inner,
    .content-wrap {
    background:rgba(255,255,255,0.75) !important;
    }
    /*底部连接颜色*/
    #footer a {
    color:#eee;
    }

主要是可以自定义一些样式

Hexo标签插件

图片

在文章中插入指定大小的图片。

1
2
3
4
{% img [class names] /path/to/image [width] [height] [title text [alt text]] %}

<!-- 例 -->
{% img img-test /assets/images/avatar/avatar.jpg 150 150 图片测试 %}

NexT内建标签

引用块

1
2
3
4
5
6
7
8
9
<!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 -->
<!-- 其中 class="blockquote-center" 是必须的 -->
<blockquote class="blockquote-center">blah blah blah</blockquote>

<!-- 标签 方式,要求版本在0.4.5或以上 -->
{% centerquote %}blah blah blah{% endcenterquote %}

<!-- 标签别名 -->
{% cq %} blah blah blah {% endcq %}

blah blah blah

突破容器宽度限制的图片

1
2
3
4
5
6
7
8
9
<!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 -->
<!-- 其中 class="full-image" 是必须的 -->
<img src="/image-url" class="full-image" />

<!-- 标签 方式,要求版本在0.4.5或以上 -->
{% fullimage /image-url, alt, title %}

<!-- 别名 -->
{% fi /image-url, alt, title %}
NexT内建标签fi

Bootstrap Callout

1
2
3
4
{% note class-name %} Content (md partial supported) {% endnote %}

<!-- 例 -->
{% note success %} 内容 **加粗** (md partial supported) {% endnote %}

可选class-name为Bootstrap的样式:
defaultprimarysuccessinfowarningdanger

内容 加粗

内容 加粗

内容 加粗

内容 加粗

内容 加粗

内容 加粗

使用 Visual Studio 2015 时出现的问题

环境:win7

场景

  • 发布Web项目到FTP时 失败,并提示 无法打开网站”ftp://…”。未安装与 FTP 服务器进行通信所需的组件(或”Unable to open the Web site ‘ftp://…’. The components for communicating with FTP servers are not installed.”)*
  • 可以直接使用文件管理器正常访问ftp地址

参考

解决方法

安装32位Visual C++ Redistributable Packages for Visual Studio 2013 ,然后重启电脑即可

下载链接:vcredist_x86

考虑把问题翻译成英文以后查,的确能搜到更多的信息

LeetCode小记

好久没写过题目了,思维都僵化了←_←,所以先找点简单些的题目找找感觉。
因为现在基本不会用到C/C++,所以使用Java来做。

TwoSum系列题目

题意 > 求数组内相加为目标值的两个数的下标

1 Two Sum

这题要做出来很简单,但是想优化一下时间复杂度就要思考思考了。第一反应只想到了用Map来存数和下标的键值对,考虑是不是排个序再取个目标值的一半,然后向两边加。但是这样实际上做了层排序,耗费了时间,如果有多个目标值而数组一致的话,可以考虑。当然这里就不是了。

正解:使用Map,来逐个存储数组的数,并在存储前检查Map内是否包含a与将要存储的数b,满足b + a = target,满足则返回a的下标和当前数的下标,否则存储b及下标,然后继续下一个数。

小结:这样省去了查找下标、查到结果以外的无用计算等等。

167 Two Sum II —— Input array is sorted

刚好就看到有这题,之前从里往外的算法,实现比较不简洁,看到题解什么的都是从外往里算的,当然这样比较好用while来写。

2 Add Two Numbers

题意 > 两个正整数,用单向链表来倒叙表示,链表的每个节点代表数的一位,求相加后的数对应链表。

要点:相加进位,进位的值要加到下一个节点,最高位进位,两个数不同长度的补位

1 + 9,9,9 = 0,0,0,1,这里多次进位

方法:我一开始用的递归实现,因为更好想一点吧(以前一定直接非递归的Orz),每个节点考虑,计算相加的结果,然后填入new的节点ttnext递归调用传入两个节点对应的next,中间加上判空以及溢出计算就好了。
非递归也没有那么麻烦,只是用while来实现子节点的计算。

Apache、Nginx和Tomcat的不同

  1. Apache和Nginx都是Http Server,主要代理静态Http资源请求,服务器本身不能动态生成页面(可以通过其他模块),Tomcat则是在Apache后加了一层应用,可以代理“动态”资源请求(Jsp、Servlet…),即动态生成页面等
  2. Nginx常用于反向代理服务器,并发非阻塞,Apache并发阻塞,但稳定

SQL

  1. 删除表内所有数据

    1
    TRUNCAT TABLE A;
  2. 有条件批量删除数据优化

索引可以提高select的速度,但是会减慢delete的速度,所以,需要有条件大量删除数据时,可以考虑在半夜,备份索引,删除索引,建立删除条件的索引,然后批量删除数据

Docker

用于作为各类镜像的容器,提高环境的搭建效率,可以快速便捷的部署到服务器

日常

在现在的工作里,越来越觉得以前学的软件工程、算法、计算机网络、Linux什么的都好有用,比那些的框架更有意义。

Vue小记

使用侦听属性watch时,属性只有新旧值不同时才会触发

Js小记

1
2
0 == '' -> true
0 === '' -> false

Session

Session在浏览器关闭后是不会直接自动结束的,重启浏览器重新进入新的会话

Session ID在浏览器中是保存为Cookie的,只是不使用保存在硬盘上的话,会保存在进程中,即内存中。当浏览器关闭,进程下的Cookie自然丢失,重启也就找不到了,只能重启新的会话。

小记:
为了延长登录有效时间,做了定时器来在每次请求后,定时刷新登录状态,但是一直没想好怎么做好随着Session结束,来结束定时器。原来浏览器关闭,Session还没被回收,那也就不用考虑了。做好定时的单例,以及定时的确定会关闭,以及随登录验证来启用结束更重要。

工具 -> 环境 -> 键盘
-> 1. 显示命令包含:搜索要修改的快捷键名字

* 修改显示智能提示的快捷键
名字:视图.显示智能标记
* 修改注释快捷键
搜索:注释
  1. 新建快捷键用于 全局 -> 按快捷键 -> 选中输入框,按下要设置的快捷键
    个人习惯,修改为Ctrl + `
    快捷键设置界面