The Pragmatic Programmer
Programming is a craft. At its simplest, it comes down to getting a computer to do what you want it to do (or what your user wants it to do). As a programmer, you are part listener, part advisor, part interpreter, and part dictator.You try to capture elusive requirements and find a way of expressing them so that a mere machine can do them justice. You try to document your work so that others can understand it, and you try to engineer your work so that others can build on it. What’s more, you try ...
HDOJ 1010 Tempter of the Bone 深搜&剪枝
细心和智慧并存的解答题目链接
题的大致意思是能不能从起点经过T时间精准到达终点,图中有一些障碍不能走,走过的格子也不能再走。
其中数据是最大7*7的迷宫,最多50个迷宫。
智慧之处——精准的剪枝类似全排列的深搜时间复杂度是O(n!),7*7的数据是过不去的。
首先就是普通地剪枝:
如果时间已经大于T,就不用再走了
如果已经有正确答案,要及时地退出搜索
然后是奇偶剪枝,这里参考了其他博客
这里我重新画了一张图,如下:
图中的S可以代表任何你走到的位置,不一定是起点。就如图中的红色和蓝色路径,这两条路径是最少需要的时间。如果剩余时间少于最短路径长度,那么是一定不能到达终点的。
既然时间不够一定不能到达,时间刚好和剩余最少时间相等也能到达,那么还剩一种情况,就是时间大于剩余最少时间。这也应该是大概率会遇到的情况。根据题意我们只能在第T秒精准到达终点,我们时间多出来的怎么办呢?——我们需要在终点周围“徘徊”。
如图中的绿色和黄色箭头所示,你比最短路径多走出来的路径,一定是先“出去”,再“回来”。多走的路径是“对称的”,那多出来的路径长度一定是偶数。
这就是奇偶性剪枝 ...
HDOJ 1007 Quoit Design 圆环设计
一道经典的分治题目链接
题意是套圈游戏要设计一款尺寸最大的圆环,满足圆环不会一次套中两个物品。每个物品有一个摆放坐标。我们要求的是这些物品中相邻最近的两个物品之间的距离,这个距离就是我们要求的圆环的直径。
这个类型网上常称为寻找最近点对问题。
数据是十万(1e5),分治算法时间复杂度是O(nlogn),刚好能够跑完。
分治的思想就是我们先将所有点按照横坐标从小到大排序,然后将点分成左右两部分,也就是图中的L和R区域,这样我们就可以分别求两边的距离最小值。当然在中间线的mid部分也是需要求距离的。
在算完两边的距离最小值d后,我们将中间线向左和向右扩展d长度,组成mid的领域。可以知道如果领域再扩大增加的点并不会形成更优的答案。这里需要注意,我们的L和R区域是以中间线为界,也就是说mid区域其实是叠加在两边区域之上的。
虽然中间区域的点已经会排除掉一些点,但是直接用双重循环找最短距离会超时。这是因为如果点都在中间密集的话时间复杂度会接近O(n*n)。
所以我们需要把中间点按照y的从小到大排序,在循环中如果两点纵坐标之间的距离已经大于d的时候及时跳出循环,完成剪枝。在oi-wik ...
更有效地解决括号匹配问题
这是力扣上一道非常简单的问题,是经典的解决括号匹配问题。当然做法是用一个栈即可解决问题。有效的括号
这是我的代码:
123456789101112131415161718192021222324class Solution { public boolean isValid(String s) { Stack<Character> st = new Stack(); boolean flag = true; for(int i=0;i<s.length();i++){ Character nowC = s.charAt(i); if(nowC=='('||nowC=='{'||nowC=='['){ st.push(nowC); }else { if(st.empty() ...
博客的免费图床方案
博客的免费图床方案(Cloudflare R2 + PicGo)参考博客
这个博客写的已经非常详细清楚了,这里不再赘述实现步骤。
这里记录一下我是怎么发现这篇博客的。
在一个很无聊的时间段,我打开了Inoreader看RSS订阅的博客列表有没有更新,其中有一篇少数派的博客吸引了我,是这个博客。
这里博主提到了他的推特账号。其中很近的时间里他发布了上面提到的免费图床方案的博文。
这篇博客解决了我正在苦恼的问题,那就是博文中图片的插入。如果是只有一个github pages的静态网站还好说,直接传在相对文件夹里即可。但是如果面对多平台,比如我还想在csdn中发布,那就变得很麻烦,因为markdown里写的相对路径将不可用,最直接的办法就是更改每个图片链接。
然而如果是有自己的图床就很方便了,不用担心网络上的图片会突然失效,多平台发布也不用更改自己的截图路径。上方的图片就是用我自己实现的图库。
事实上这个免费解决方案是相对于已经使用过CloudFlare和买过且用过域名的人看的。有一些点没有提及。首先你如果想用R2的话你最好有一张VISA卡进行账户的认证。还有对 ...
Eloquent JavaScript 09 Exercises
正则表达式To the book page
Regexp golf注意这里如果写对的话,应该什么都不会输出。
正则表达式中的\b是单词边界的标志,它用来匹配一个单词的边界。
123456789101112131415161718192021222324252627282930313233343536373839404142// Fill in the regular expressions// 正则表达式应该匹配“car”和“cat”,但不匹配其他字符串。verify(/ca[rt]/, ["my car", "bad cats"], ["camper", "high art"]);// 正则表达式应该匹配“pop”和“prop”,但不匹配其他字符串。verify(/pr?op/, ["pop culture", "mad props"], ["plop", "prrrop" ...
2024年Android项目实现高德导航
使用高德SDK实现导航功能参考博客
Github仓库直达
这是今天企业实训的一个小作业,实际上我从昨天就开始尝试申请key然后下载官方Demo开始实验。本来是要做flutter项目,但是高德官方里flutter教程只有显示地图和定位功能,没有导航功能,导航功能官方只有Android的教程。今天也是用Android原生进行编写的。至于怎么整合到flutter项目里目前还不知道。。。
1. 官网下载SDK我也尝试过直接gradle引入包的操作,但是直接引入的会缺少AmapNaviParams。官网也一直强调有个什么东西开源了所以提供的包里移除了一些东西(不知道到底是什么)。
官网SDK下载地址
我下载的是导航合包:
2. 创建项目直接Android Studio创建一个java,Groovy的项目即可。
设置里需要设置生成所有Gradle Task:
这样你就可以靠点击这里直接获得你项目的SHA1的值,申请key的时候需要这个。
点击上图位置你就可以在终端看见你的SHA1值。在我这里release和debug的SHA1的值是一样的。
3. 导入 ...
Eloquent JavaScript 08 Exercises
错误To the book page
Retry大概率触发MultiplicatorUnitFailure错误,承接直到运行成功并返回结果。
1234567891011121314151617181920212223242526272829class MultiplicatorUnitFailure extends Error {}function primitiveMultiply(a, b) { if (Math.random() < 0.2) { return a * b; } else { throw new MultiplicatorUnitFailure("Klunk"); }}function reliableMultiply(a, b) { // Your code here. for(;;){ try{ var ans = primitiveMultiply(a,b); break; ...
Eloquent JavaScript 07 robot
robotTo the book page代码解释由AI生成。
总代码数据结构和图的构建首先定义了村庄中各个地点之间的道路:
123456789const roads = [ "Alice's House-Bob's House", "Alice's House-Cabin", "Alice's House-Post Office", "Bob's House-Town Hall", "Daria's House-Ernie's House", "Daria's House-Town Hall", "Ernie's House-Grete's House", "Grete's House-Farm", "Grete's House-Shop", ...
Eloquent JavaScript 06 Exercises
对象To the book page
A vector type封装一个类,实现坐标的加减法,以及get属性的length返回坐标离原点的距离。
12345678910111213141516171819202122// Your code here.class Vec{ constructor(x,y){ this.x = x; this.y = y; } plus(other){ return new Vec(this.x+other.x,this.y+other.y); } minus(other){ return new Vec(this.x-other.x,this.y-other.y); } get length(){ return Math.sqrt(this.x**2+this.y**2); }}console.log(new Vec(1, 2).plus(n ...