LintCode/LeetCode训练题目&答案详解—基础篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode/LeetCode训练题目&答案详解—基础篇相关的知识,希望对你有一定的参考价值。

参考技术A

一、在二叉树中寻找值最大的节点并返回:
给出如下一棵二叉树:

返回值为 3 的节点。

简析:使用了递归的思想;注意为空的判断;

二、单例

单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。

你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。

样例:
在 Java 中:

A a = A.getInstance();
A b = A.getInstance();
a 应等于 b.

挑战:
如果并发的调用 getInstance,你的程序也可以正确的执行么?

注意:实现一个单例有两点注意事项,①将构造器私有,不允许外界通过构造器创建对象;②通过公开的静态方法向外界返回类的唯一实例

参考:单例模式的几种写法对比:
http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

三、整数排序

给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。

样例:
对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。

答案(java版本):

选择排序:

冒泡排序:

答案解析:
各个语言的实现请参考维基百科: https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

** 四、斐波那契数列**

查找斐波纳契数列中第 N 个数。所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

答案:

注意事项:
1、n是从1开始的,而不是0
2、一般我们都会想到用递归的方式实现,但是这个时间开销很大:

3、题目的引申: 青蛙跳阶梯 ,铺方砖
参考: http://www.bubuko.com/infodetail-1099705.html

[Lintcode]739. 24 Game/[Leetcode]679. 24 Game

?[Lintcode]739. 24 Game/[Leetcode]679. 24 Game

本题难度: Hard/Medium

Description

You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through?*,?/,?+,?-,?(,?)?to get the value of 24.

Example 1:

Input: [4, 1, 8, 7]
Output: True
Explanation: (8-4) * (7-1) = 24

Example 2:

Input: [1, 2, 1, 2]
Output: False

Note:

The division operator?/?represents real division, not integer division. For example, 4 / (1 - 2/3) = 12.
Every operation done is between two numbers. In particular, we cannot use?-?as a unary operator. For example, with?[1, 1, 1, 1]?as input, the expression?-1 - 1 - 1 - 1?is not allowed.
You cannot concatenate numbers together. For example, if the input is?[1, 2, 1, 2], we cannot write this as 12 + 12.

我的代码


import sys
class Solution:
? ??
? ? def judgePoint24(self, nums: List[int]) -> bool:
? ? ? ? def cal(a,b):
? ? ? ? ? ? if a == 0:
? ? ? ? ? ? ? ? return b,-b,0
? ? ? ? ? ? if b == 0:
? ? ? ? ? ? ? ? return a,-a,0
? ? ? ? ? ? return list(a+b,a-b,b-a,a*b,a/b,b/a)
? ? ? ? stack = [[float(item) for item in nums]]
? ? ? ? while (len(stack) > 0):
? ? ? ? ? ? tmp_nums = stack.pop()
? ? ? ? ? ? if len(tmp_nums) == 1:
? ? ? ? ? ? ? ? if abs(tmp_nums[0] - 24.0) <= 0.0001:
? ? ? ? ? ? ? ? ? ? return True
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? l = len(tmp_nums)
? ? ? ? ? ? for n1 in range(l - 1):
? ? ? ? ? ? ? ? for n2 in range(n1 + 1,l):
? ? ? ? ? ? ? ? ? ? tmp_cals = cal(tmp_nums[n1],tmp_nums[n2])
? ? ? ? ? ? ? ? ? ? for tmp_cal in tmp_cals:
? ? ? ? ? ? ? ? ? ? ? ? tmp_res = [tmp_cal] + tmp_nums[:n1] + tmp_nums[n1 + 1:n2] + tmp_nums[n2 + 1:]
? ? ? ? ? ? ? ? ? ? ? ? stack.append(tmp_res)
? ? ? ? return False ? ? ? ? ? ? ??
? ? ? ? ? ? ? ??

以上是关于LintCode/LeetCode训练题目&答案详解—基础篇的主要内容,如果未能解决你的问题,请参考以下文章

[LintCode/LeetCode]——两数和三数和四数和

LintCode,hihoCoder,LeetCode有啥区别

LintCode 539: Move Zeroes

63天算法训练详细说明

[Lintcode]74. First Bad Version/[Leetcode]278. First Bad Version

[leetcode / lintcode] Tree - relative