【盛最多水的容器】问题的求解
这是一个leet code出现的问题: 给 n 个非负整数 $a_1$,$a_2$,…,$a_n$,每个数代表坐标中的一个点(i, $a_i$) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i, $a_i$) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 ...
这是一个leet code出现的问题: 给 n 个非负整数 $a_1$,$a_2$,…,$a_n$,每个数代表坐标中的一个点(i, $a_i$) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i, $a_i$) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 ...
实现 下面将使用Scheme语言来实现“无重复字符的最长子串”,即,对于字符串"abbabcx",其最长无重复字符的子串为"abcx",长度4,详细描述可访问https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ ...
本文在于解答LeetCode中的第二题,问题的描述可参见 两数相加 Golang的实现: /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { result := &ListNode{} nodes := []*ListNode{} var carry = 0 for { node, c := add(l1, l2, carry) carry = c if node != nil { nodes = append(nodes, node) if l1 != nil && l1.Next != nil { l1 = l1.Next } else { l1 = nil } if l2 != nil && l2.Next != nil { l2 = l2.Next } else { l2 = nil } if carry > 0 && (l1 == nil && l2 == nil) { nodes = append(nodes, &ListNode{Val:carry}) } } else { break } } for i, n := range nodes{ if i == 0 { result = n } if i + 1 < len(nodes) { n.Next = nodes[i + 1] } } return result } func add (n1 *ListNode, n2 *ListNode, carry int) (*ListNode, int) { node := &ListNode{} if (n1 == nil && n2 == nil) { return nil, 0 } if n1 == nil { n1 = &ListNode{Val : 0} } if n2 == nil { n2 = &ListNode{Val : 0} } sum := n1.Val + n2.Val + carry carry = 0 if sum > 9 { carry = 1 sum = sum - 10 } node.Val = sum return node, carry } 下面提供Scheme版本的实现【(1 0) + (9 1 2) = (0 2 2)】,为了简单起见,与题目要求稍有不同,这里采用list,而不是题目要求的链表,但实际上应是一样的。比较之下可以看出,相对而言,Scheme语言的实现更加简短优雅,得益于其强大的表达能力 ...