Algorithm
Leetcode 2 两数相加
给出两个非空的逆序链表(两个数都不会以 0 开头),求两数相加后的逆序数。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
解法一(利用了给定的ListNode功能)
n1、n2分别是两个数组依次取到的值,n表示进位符(如果两数相加超过10的话,要进1位)。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
const addTwoNumbers = function(l1, l2) {
var node = new ListNode('head') /*初始化指针到最左边的节点*/
var temp = node , sum , n = 0 /*temp是指针,sum是总和,n判断是否需要进位*/
while( l1 || l2 ){
const n1 = l1 ? l1.val : 0 /*逆序遍历两数组的每个节点*/
const n2 = l2 ? l2.val : 0
sum = n1 + n2 + n /*两两节点相加,如果有进位,n=1,也加进去*/
temp.next = new ListNode( sum % 10 )
temp = temp.next
n = parseInt( sum / 10 ) /*n取当前总和的十进制位数字*/
if(l1) l1 = l1.next
if(l2) l2 = l2.next
}
if( n > 0 ) temp.next = new ListNode(n) /*如果n超过0,说明有进位,赋值给下一组数*/
return node.next
};
singly-linked逐一连接的
===严格相等比较,不仅比值的大小,还比类型。
const定义常量,无法通过被赋值改变,也不能被重新声明。
parseInt解析一个字符串并返回指定基数的十进制整数
解法二(用时、内存开销偏大)
油管上面的解法,也是把L1和L2上每组对应位置的数相加。代码是l1,l2分开写的,这样内存开销就很大。
上图中的例子,2+5=7,4+6=10,保留0进1到下一个合里 3+4+1=8,708倒过来遍历就是807。
var addTwoNumbers = function(l1, l2) {
var carry=0, res=new ListNode();//a dummy head
var cur=res;
while(l1&&l2){
var tmp= l1.val+l2.val+carry;
carry = Math.floor(tmp/10);
var next=tmp%10;
cur.next= new ListNode(next);
cur=cur.next;
l1=l1.next;
l2=l2.next;
}
while(l1){
var tmp=l1.val+carry;
carry=Math.floor(tmp/10);
var next=tmp%10;
cur.next=new ListNode(next);
cur=cur.next;
l1=l1.next;
}
while(l2){
var tmp=l2.val+carry;
carry=Math.floor(tmp/10);
var next=tmp%10;
cur.next=new ListNode(next);
cur=cur.next;
l2=l2.next;
}
if (carry>0){
cur.next=new ListNode(carry);
}
return res.next;
};
Review
维州190技术移民
水一下,今天查了申请要求,希望毕业两年485工签结束后可以达到。
今年对医疗护士人员比较照顾,名额都给他们了,希望等我毕业了多开放点给IT人员呀。
居住和工作证明
- 必须至少在过去六个月里在维多利亚生活和工作过。
- 需要在申请表中提供居住证明。
- 当前的房地产租赁或债券协议
- 证明您过去6个月在维多利亚州居住的账单或文件。
这两点好喜欢:
- Applicants with a track record of commercialising innovative ideas and bringing them to market will also be highly regarded.
- International student graduates and PhD applicants who meet the criteria are also encouraged to apply.
职业类别
应该是选UNIT GROUP 2613 SOFTWARE AND APPLICATIONS PROGRAMMERS
工作证明
- 目前的雇佣合同的签字副本
- 过去6个月的工资单
- 雇主过去6个月的退休金缴款证明
- 当前的职位描述
- 当前雇主的详细信息(包括电话号码)。
技能评估
要完成一个EOI的评分,至少65分以上才能获邀。有一个打分计算器。
Tip
JS中let和var的区别
Var是全局变量,let只是局部变量。两者都支持重新申明修改,但不能放在一起混用。
_
Share
区块链平台Hyperledger Sawtooth 和Hyperledger Fabric的区别
通过这个表格可以看到:
超级账本Sawtooth同时支持需要许可、无需许可的模式(Fabric仅支持需要许可的模式);
支持BFT拜占庭容错(Fabric支持崩溃容错);
交易处理是通过验证器(Fabric通过endorsing peers & ordering services 背书的对等方和服务订购?);
共识算法好高端,采用运行时间证明、拜占庭容错实践、Raft、Devmode(Fabric是卡夫卡、Raft、Solo),看来Raft这个算法很吃香呀,双平台通吃;
交易速度慢了点,每秒超过1000笔交易(Fabric超过2000笔);
通过Seth支持Ethereum Virtual Machine以太坊虚拟机(Fabric直接支持);
智能合约技术采用交易族(Fabric采用链码);
数据存储在一个中央lmdb数据库中,每个交易族使用一个单独的地址前缀(Fabric采用CouchDB或leveldb);
支持的开发语言更多,Rust, JavaScript, Go, Python, Solidity看起来语言更加新一点(Fabric支持Go、Java、JavaScript、Solidity);
智能合约类型,同时支持供链上(网络范围)执行或提交到分类账前/网络启动前执行(Fabric仅支持后者)。