mirror of
https://github.com/SunnyQjm/algorithm-homework.git
synced 2026-10-05 01:15:36 +08:00
61 lines
1.8 KiB
Markdown
61 lines
1.8 KiB
Markdown
# Algorithm Homework 1
|
||
> 姓名:阙建明
|
||
>
|
||
> 学号:1901213139
|
||
|
||
- ## 作业要求
|
||
3道上课讲的LeetCode题目1,69,70
|
||
|
||
- ## Leetcode problem 1 (两数之和)
|
||
- 算法思路:<br/>
|
||
用字典记录数字,以便在找到成对的另一个数的时候,可以快速的检索到前一个数的索引
|
||
|
||
- Leetcode提交结果
|
||

|
||
- 代码:
|
||
```python
|
||
def twoSum(self, nums: List[int], target: int) -> List[int]:
|
||
myDict = {}
|
||
for index, num in enumerate(nums):
|
||
if num in myDict:
|
||
return [myDict[num], index]
|
||
else:
|
||
myDict[target - num] = index
|
||
```
|
||
|
||
- ## Leetcode problem 69 (x 的平方根)
|
||
- 算法思路:二分法
|
||
|
||
- Leetcode提交结果
|
||

|
||
- 代码:
|
||
```python
|
||
def mySqrt(self, x: int) -> int:
|
||
if x in [1, 2, 3]:
|
||
return 1
|
||
left = 0
|
||
right = x // 2
|
||
while True:
|
||
mid = (left + right) // 2
|
||
if left + 1 >= right:
|
||
break
|
||
if mid < x / mid: # mid to small
|
||
left = mid
|
||
else:
|
||
right = mid
|
||
return right if right * right <= x else left
|
||
```
|
||
|
||
- ## Leetcode problem 70 (爬楼梯)
|
||
- 算法思路:动态规划。由于当前状态只取决于前两个状态,所以dp table可以精简为只用两个数表示
|
||
|
||
- Leetcode提交结果
|
||

|
||
- 代码:
|
||
```python
|
||
def climbStairs(self, n: int) -> int:
|
||
pre, cur = 0, 1
|
||
for i in range(1, n + 1):
|
||
pre, cur = cur, pre + cur
|
||
return cur
|
||
``` |