关于 ARTS:一个需要持续地坚持的高效学习项目,每周写一个ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
从低位到高位依次相加,过程中要考虑进位。并且当两个链表长度不一样时,把较短的链表后面补 0 表示。 对于需要返回头结点的问题,可以先初始化一个预先指针 pre,该指针的下一个节点指向真正的头结点,保证链表构造过程中就需要指针移动了,仍能找到头指针。
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode current = pre;
int carry = 0;
while (l1 != null || l2 != null) {
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
int sum = x + y + carry;
carry = sum / 10;
sum = sum % 10;
current.next = new ListNode(sum);
current = current.next;
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
if (carry == 1) {
current.next = new ListNode(1);
}
return pre.next;
}
}
来源:https://queue.acm.org/detail.cfm?id=1394128 译文:https://www.cnblogs.com/savorboard/p/base-an-acid-alternative.html
对应水平扩展存在多个子系统的系统架构,基于 CAP 理论,传统的 ACID 保证多系统间的强一致性,但这个是以降低系统的整体可用为代价的;而在某种场景下,系统对一致性的要求并不是那么严格,只要能保证最终一致性即可,这是可以利用 Base 理论去设计一个允许局部不可用,但保证整体可用,且数据行为过程中可能不一致,但始终保持一致的架构,更有利于系统整体的可扩展性。
使用在线命名工具:https://unbug.github.io/codelf/,利用一些技术开源平台,如 Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project, GitLab 的代码片段搜索匹配出跟关键字相关性高的变量命名,用于开发者参考和选用在自己工作编程需要进行命名的时候。同时也支持多个编辑器插件,详见:https://github.com/unbug/codelf
https://www.yuque.com/docs/share/d0de42ee-d05c-424c-a822-5f94c2b6ca7f