MeiYL's Blog


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

剑指offer-机器人的运动范围

发表于 2018-01-07 | 分类于 算法 | | 阅读次数:

剑指offer上的题目,在牛客网上刷题通过,下面记录相关思路。

题目描述

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

问题分析

这是一个典型的回溯法问题,首先我们需要明确问题的解空间并确定解空间的结构,以便回溯搜索求解。解空间是一个m x n的向量组,表示对应方格中的每一个格子是否能够达到,分别用0和1标记这两种状态,解空间的结构采用二维数组极为方便,递归前将其初始化为全0状态。

回溯的过程采用递归实现时较为容易,思路如下:

  • 判断当前坐标是否可到达,需要满足一下两个条件:
    • 当前所在坐标数位和不超过阈值
    • 解向量中该坐标处元素值为0
  • 若不可到达返回0,若可到达将向量组中该处元素置为1
  • 继续对该点上(i,j+1)下(i,j-1)左(i-1,j)右(i+1,j)四个点递归上述步骤
  • 递归出口是坐标值不超过矩阵四个边界
    阅读全文 »

剑指offer-调整数组顺序

发表于 2018-01-06 | 分类于 算法 | | 阅读次数:

剑指offer上的题目,在牛客网上刷题通过,下面记录相关思路。

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

问题分析

该问题有一种比较简单的且时间复杂度为O(n)的方法,即从前往后遍历数组,将奇数剪切下来放到新数组中,最后将剩余的偶数放到新数组尾部即可,空间复杂度为O(n)。

这里我们讨论另一种方法。要想保证原有次序,则只能顺次移动或相邻交换。设置一个索引i从左向右遍历,找到第一个偶数,设置另一个索引j从该偶数后开始向后找,直到找到第一个奇数。按照题目要求的排序方式,该奇数应该位于前面整段偶数的前面,将两个索引所包含的这一段(i到j-1)整体后移一位,将找到的奇数插入到前面空出的位置i中并将i加1,此时i到j这一段已经都是偶数了,下一次循环时j不用回退到i+1的位置开始查找下一个奇数。

阅读全文 »

Chrome扩展利器

发表于 2018-01-05 | 分类于 业余爱好 | | 阅读次数:

没有插件的Chrome只有四成功力

下面介绍几款在前端开发中必不可少的扩展程序。

Vue.js devtools

查看vue组件的属性、事件等
pic3

阅读全文 »

Git设置socks5代理

发表于 2017-03-05 | 分类于 版本控制 | | 阅读次数:

GitHub在国内访问一直都很慢,稍大一点的项目就无法clone,严重时甚至无法push。平时一直在用ss,正好就用它给Git设置代理。一般步骤很简单,使用git命令配置:

1
2
3
4
5
6
7
8
9
10
11
12
# ss服务本地默认端口为1080
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
# 也可将http/https改为socks5协议,如:socks5://127.0.0.1:1080

# 若http代理需要认证,需加上用户名:密码
git config –global http.proxy http://user:password@127.0.0.1:1080
git config –global http.proxy https://user:password@127.0.0.1:1080

# 删除http代理
git config --global --unset http.proxy
git config --global --unset https.proxy

事实上,代理设置好后下载速度直接达到带宽满速,但是仅仅只适用于http或者https协议的Git地址,对于git@开头的ssh协议地址无效。通过ssh key与GitHub通信更加便捷,不用每次push都输入账号和密码,并且ssh协议也更加安全。显然无法直接在不同协议之间代理,那么就需要转换数据包。
阅读全文 »

Redis服务停止出错

发表于 2017-02-24 | 分类于 数据库 | | 阅读次数:

在本地配置了一台Ubuntu Server 16.04,发现关闭或者重启服务器时总是卡在stop redis_6379 service。之前自用Redis和MongoDB服务都在HostUS,跑着CentOS 6,VPS从未手动关机或重启过,自然也就没有注意到Redis会出问题。既然出现了不和谐现象,就要追根溯源,彻底解决。既然service redis_6379 stop无效,那么只能手动通过redis-cli关闭服务了:

1
2
root@ubuntu:~# redis-cli -a yourpassword
127.0.0.1:6379> shutdown save

但是这样关闭服务太过麻烦,并且设置了redis开机自启动后,每次关机都要先手动关闭服务,很是繁琐。那么如果将服务默认关闭方法改为调用redis-cli来完成,问题不就解决了吗?于是马上在/etc/init.d中找到了redis_6379,打开一看立马懵圈。原来系统默认调用的就是redis-cli,而且还是未认证方式,redis服务设了密码,当然无法关闭了。将stop方法改为以下内容即可:
阅读全文 »

123…8
MeiYL

MeiYL

一本正经地胡说八道

36 日志
10 分类
34 标签
GitHub Stack Facebook Twitter 知乎
  • thewangcj
© 2015 — 2019 MeiYL
由 Hexo 强力驱动
|
主题 — NexT.Pisces