ARTS 打卡计划第一周 04/21
Algorithm
TwoSum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
package easy;
import java.util.HashMap;
/**
* 一遍hash表
* 复杂度分析:
* 时间复杂度:O(n)O(n), 我们只遍历了包含有 nn 个元素的列表一次。在表中进行的每次查找只花费 O(1)O(1) 的时间。
* 空间复杂度:O(n)O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 nn 个元素。
**/
public class TwoSum {
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hashMap = new HashMap();
for (int i=0;i<nums.length;i++){
if (hashMap.containsKey(target-nums[i])){
return new int[]{hashMap.get(target-nums[i]) , i};
}
hashMap.put(nums[i],i);
}
//return nums;
throw new IllegalArgumentException("No two sum solution");
}
}
}
复制代码
提交结果
Review
eHarmony hooks up with Redis NoSQL database for hot storage
这篇文章主要讲了美国最大的婚恋交友网站使用Redis来实现匹配功能等热数据的实现,文章叙述了非关系型数据库对于传统的关系型数据库的优势,该公司的架构师也做出了相关了的考虑分析。解释了Redis在热数据处理速度上的巨大优势,以及不同数据库对应的不同应用场景。
Tips
学习双向认证流程
a. 客户端发送一个连接请求给服务器。
b. 服务器将自己的证书,以及同证书相关的信息发送给客户端。
c. 客户端检查服务器送过来的证书是否和App内置证书相同。如果是,就继续执行协议;如果不是则终止此次请求。
d. 接着客户端比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户端认可这个服务器的合法身份。
e. 服务器要求客户发送客户自己的证书。收到后,服务器验证客户端的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
f. 客户端告诉服务器自己所能够支持的通讯对称密码方案。
g. 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知客户端。
h. 客户端针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
i. 服务器接收到客户端送过来的消息,用自己的私钥解密,获得通话密钥。
j. 服务器通过密钥解密客户端发送的被加密数据,得到明文数据。