Algorithm

Leetcode 2 两数相加

给出两个非空的逆序链表(两个数都不会以 0 开头),求两数相加后的逆序数。
示例 1:
Week 3 - 图1
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
image.png

解法一(利用了给定的ListNode功能)

n1、n2分别是两个数组依次取到的值,n表示进位符(如果两数相加超过10的话,要进1位)。

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val, next) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.next = (next===undefined ? null : next)
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} l1
  10. * @param {ListNode} l2
  11. * @return {ListNode}
  12. */
  13. const addTwoNumbers = function(l1, l2) {
  14. var node = new ListNode('head') /*初始化指针到最左边的节点*/
  15. var temp = node , sum , n = 0 /*temp是指针,sum是总和,n判断是否需要进位*/
  16. while( l1 || l2 ){
  17. const n1 = l1 ? l1.val : 0 /*逆序遍历两数组的每个节点*/
  18. const n2 = l2 ? l2.val : 0
  19. sum = n1 + n2 + n /*两两节点相加,如果有进位,n=1,也加进去*/
  20. temp.next = new ListNode( sum % 10 )
  21. temp = temp.next
  22. n = parseInt( sum / 10 ) /*n取当前总和的十进制位数字*/
  23. if(l1) l1 = l1.next
  24. if(l2) l2 = l2.next
  25. }
  26. if( n > 0 ) temp.next = new ListNode(n) /*如果n超过0,说明有进位,赋值给下一组数*/
  27. return node.next
  28. };

image.png
singly-linked逐一连接的
===严格相等比较,不仅比值的大小,还比类型。
const定义常量,无法通过被赋值改变,也不能被重新声明。
parseInt解析一个字符串并返回指定基数的十进制整数

解法二(用时、内存开销偏大)

image.png
油管上面的解法,也是把L1和L2上每组对应位置的数相加。代码是l1,l2分开写的,这样内存开销就很大。
上图中的例子,2+5=7,4+6=10,保留0进1到下一个合里 3+4+1=8,708倒过来遍历就是807。

  1. var addTwoNumbers = function(l1, l2) {
  2. var carry=0, res=new ListNode();//a dummy head
  3. var cur=res;
  4. while(l1&&l2){
  5. var tmp= l1.val+l2.val+carry;
  6. carry = Math.floor(tmp/10);
  7. var next=tmp%10;
  8. cur.next= new ListNode(next);
  9. cur=cur.next;
  10. l1=l1.next;
  11. l2=l2.next;
  12. }
  13. while(l1){
  14. var tmp=l1.val+carry;
  15. carry=Math.floor(tmp/10);
  16. var next=tmp%10;
  17. cur.next=new ListNode(next);
  18. cur=cur.next;
  19. l1=l1.next;
  20. }
  21. while(l2){
  22. var tmp=l2.val+carry;
  23. carry=Math.floor(tmp/10);
  24. var next=tmp%10;
  25. cur.next=new ListNode(next);
  26. cur=cur.next;
  27. l2=l2.next;
  28. }
  29. if (carry>0){
  30. cur.next=new ListNode(carry);
  31. }
  32. return res.next;
  33. };

image.png

Review

维州190技术移民

水一下,今天查了申请要求,希望毕业两年485工签结束后可以达到。
今年对医疗护士人员比较照顾,名额都给他们了,希望等我毕业了多开放点给IT人员呀。

居住和工作证明

  • 必须至少在过去六个月里在维多利亚生活和工作过。
  • 需要在申请表中提供居住证明。
  1. 当前的房地产租赁或债券协议
  2. 证明您过去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只是局部变量。两者都支持重新申明修改,但不能放在一起混用。
image.png
_

Share

区块链平台Hyperledger Sawtooth 和Hyperledger Fabric的区别

Week 3 - 图7
通过这个表格可以看到:
超级账本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采用CouchDBleveldb);
支持的开发语言更多,Rust, JavaScript, Go, Python, Solidity看起来语言更加新一点(Fabric支持Go、Java、JavaScript、Solidity);
智能合约类型,同时支持供链上(网络范围)执行或提交到分类账前/网络启动前执行(Fabric仅支持后者)。