ARTS打卡第一周 - To be or not to be

Algorithm

算法题
话说这是Leetcode排名第一的算法题

1
2
3
4
5
6
7
8
9
10
给定一个整数数组 nums 和一个目标值 target,
请你在该数组中找出和为目标值的那**两个**整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:
给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

最先想到的就是暴力破解,双重for循环遍历

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i = 0; i < nums.length; i++) {
for(int j=i+1; j < nums.length; j++){
if (nums[i] +nums[ j] == target) {
return new int[]{i,j};
}
}
}
return null;
}
}

时间复杂度是o(n^2),这显然是不能接受的,也必然不是优秀的答案,果然执行用时54ms,击败33.57%的java提交记录。

再一次审题,注意到题目中每种输入只会对应一个答案这句话,唯一性可想到Map类型的key值保存数据,使用空间换取时间。修改后的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i ++) {
int val = target - nums[i];
if (map.containsKey(val)) {
return new int[]{map.get(val), i};
}
map.put(nums[i], i);
}
return null;
}
}

时间复杂度提高到o(n),结果是:执行用时3 ms, 在所有Java提交中击败了99.14%的用户。

Review

Review了gRPC的Auth认证,文档对多种支持的授权机制提供了一个概览,并且用例子来论述对应API:

1
2
3
4
5
6
SSL/TLS
OAuth 2.0
API
- 服务端认证加密使用的 SSL/TLS
- 通过 Google 进行认证
- 扩展 gRPC 支持其他的认证机制

grpc_guides_auth

Tip

学习了一个小技巧,Linux磁盘分区表操作,对磁盘进行分区、挂载、卸载等操作。

Linux常用命令之 - fdisk

Share

分享一篇CoolShell上的一篇文章《技术人员的发展之路》

To be, or not to be - that is the question.

----------本文结束感谢您的阅读----------
xiaolong wechat
一只程序猿对世界的不完全理解