Seven's blog

你不会找到路,除非你敢于迷路

0%

Algorithm

1304. 和为零的N个唯一整数

解法一:

钻了个漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int[] sumZero(int n) {
if (n <= 1) {
return new int[]{0};
}

int[] result = new int[n];
int initNumber = 1, sum = 0;

for (int i = 0; i < n - 1; i++) {
result[i] = initNumber;
sum += initNumber;
initNumber++;
}

result[n - 1] = -sum;
return result;
}
}

执行用时:0ms,内存消耗:34.9MB。

阅读全文 »

打卡这么简单的事, 真的能影响到我?

背景

ARTS 起源于 陈皓 老师的 左耳听风 课程, 我们在其基础上做了一丢丢改造, 感谢 陈皓 老师.

两个月前, 我的朋友 大蕉 发起了一个为期 8 周的 ARTS 打卡活动:

每周打卡,自行创建一个博客地址。

打卡要求:
8人8周为一个小组。入群门槛188,8周完成全额退款,若全员完成,大蕉发188红包。

一周没打卡,请发10*当前人数红包一个。
两周没打卡,请退群。

打卡条件:
大家自发每周完成一个ARTS:
(也就是 Algorithm、Review、Tip、Share 简称ARTS)

(高级打卡组)
1.每周至少做一个 leetcode 的算法题
2.阅读并点评至少一篇英文技术文章
3.学习至少一个技术技巧(编程或其他)
4.编写一篇有观点和思考的技术文章(500字以内)

(初级打卡组)
1.每周至少做一个 leetcode 的算法题或者小玩具代码
2.阅读至少一篇英文技术文章
4.编写一篇文章(500字以内)

入群流程:
转账即报名,请描述自己想进入初级还是高级组

承诺:
我不承诺你一定能坚持下去,但我承诺你坚持下去肯定会看见不一样的自己

乍一看, 似乎很简单, 也似乎很难.

一咬牙, 我加入了这个计划.

阅读全文 »

Algorithm

1252. 奇数值单元格的数目

解法一

思路:

因为题目中行列式每次数据变换都是整行或者整列同时进行的, 所以只需要统计每一行和每一列会被自增多少次即可. 最后对应行和列的统计结果相加即为对应坐标的数值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public int oddCells(int n, int m, int[][] indices) {
int[] rows = new int[n];
int[] columns = new int[m];
for (int[] axis : indices) {
rows[axis[0]]++;
columns[axis[1]]++;
}

int oddNumber = 0;
for (int row : rows) {
for (int column : columns) {
if ((row + column) % 2 == 1) {
oddNumber++;
}
}
}

return oddNumber;
}
}

执行用时: 1ms, 内存消耗: 38.7MB.

阅读全文 »

没错, 我一个程序员, 心血来潮建了个写作群.

大学

大学生涯, 我经历的似乎只有失败二字.

大一上学期就开始挂科, 一直持续到毕业. 40 学分劝退, 曾一度挂到了 39 个学分. 学习上, 我无疑是失败的.

同班 29 人, 与我交好的只有 4 人. 同校 4 万人, 毕业后还有联系的, 屈指可数. 大学前, 整个学校都是我的好朋友, 大学后, 却和他们越走越远. 交际上, 我依然是失败的.

大学前, 我可以很自豪地说自己喜欢计算机, 说自己喜欢 DIY, 说自己喜欢轮滑. 大学后, 却一事无成. 就连兴趣爱好, 我都是失败的.

摸爬滚打两个月, 找到了全班最差的工作; 无可奈何签合同, 拿了同岗位最低的薪水. 甚至还被忽悠着贷款购买了两万块的 Python 课程. 找工作, 当然还是失败的.

阅读全文 »

Algorithm

1266. 访问所有点的最小时间

思路:

这其实更像是一个数学问题.

因为需要按顺序访问所有点, 所以可以把问题简化为计算两个点之间的最小距离, 最后把每两个点之间的最小距离累加, 问题得解.

接下来要计算两个点之间的最小距离, 因为走对角线的效率是分别走横竖的两倍, 所以我们要尽可能多地走对角线. 那么两个点之间势必会形成一块而走对角线的正方形区域, 正方形的边长就是以两点为对角形成的长方形的较短的一条边. 剩余的距离一直横着或者竖着走即可. 问题得解.

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
if (points.length <= 1) {
return 0;
}

int total = 0;
int[] last = points[0];
for (int i = 1; i < points.length; i++) {
int[] current = points[i];
int x = Math.abs(current[0] - last[0]);
int y = Math.abs(current[1] - last[1]);

int italic = Math.min(x, y);
int straight = Math.max(x, y) - italic;
int move = italic + straight;
total += move;

last = current;
}

return total;
}
}

执行用时: 1ms, 内存消耗: 41.4MB.

阅读全文 »