From ad59ff2a73a319c8cdc364f00c06fa765a2afdd3 Mon Sep 17 00:00:00 2001 From: SunnyQjm Date: Sat, 6 Jun 2020 11:46:33 +0800 Subject: [PATCH] add: chapter4_1, chapter4_2 --- chapter4/1_search-insert-position.py | 58 ++++++++++++++++++++++++++++ chapter4/2_length-of-last-word.py | 45 +++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 chapter4/1_search-insert-position.py create mode 100644 chapter4/2_length-of-last-word.py diff --git a/chapter4/1_search-insert-position.py b/chapter4/1_search-insert-position.py new file mode 100644 index 0000000..e08b2ea --- /dev/null +++ b/chapter4/1_search-insert-position.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# coding=utf-8 + +################################################################################## +# Leetcode 35 搜索插入位置 +# +# 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 +# 你可以假设数组中无重复元素。 +# +# 示例 1: +# 输入: [1,3,5,6], 5 +# 输出: 2 +# +# 示例 2: +# 输入: [1,3,5,6], 2 +# 输出: 1 +# +# 示例 3: +# 输入: [1,3,5,6], 7 +# 输出: 4 +# +# 示例 4: +# 输入: [1,3,5,6], 0 +# 输出: 0 +################################################################################## + +class Solution: + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype int + + (knowledge) + + 思路: + 1. 用二分查找试图找到目标值; + 2. 找到则返回其索引,没找到则其可能被插入的位置 + """ + left, right = 0, len(nums) - 1 + while left + 1 < right: + mid = left + (right - left) // 2 + if nums[mid] == target: + return mid + if nums[mid] > target: + right = mid + else: + left = mid + return left if nums[left] >= target else (right if nums[right] >= target else right + 1) + + +if __name__ == '__main__': + solution = Solution() + print(solution.searchInsert([1, 3, 5, 6], 5), "= 2") + print(solution.searchInsert([1, 3, 5, 6], 2), "= 1") + print(solution.searchInsert([1, 3, 5, 6], 7), "= 4") + print(solution.searchInsert([1, 3, 5, 6], 0), "= 0") + diff --git a/chapter4/2_length-of-last-word.py b/chapter4/2_length-of-last-word.py new file mode 100644 index 0000000..a4f7348 --- /dev/null +++ b/chapter4/2_length-of-last-word.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# coding=utf-8 + +########################################################################## +# Leetcode 58 最后一个单词的长度 +# +# 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 +# 如果不存在最后一个单词,请返回 0 。 +# +# 说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。 +# +# 示例: +# 输入: "Hello World" +# 输出: 5 +########################################################################## + +class Solution: + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype int + + (knowledge) + + 思路: + 1. 先将字符串两端的空格去除; + 2. 然后,从后往前遍历,遇到一个非空格,计数+1,遇到一个空格就停止计数; + 3. 返回计数结果 + """ + + # 首先去除字符串两边的空格 + s, result = s.strip(), 0 + + # 反向遍历字符串,统计最后一个单词的长度,遇到第一个空格跳出 + for i in range(len(s))[::-1]: + if s[i] == ' ': + break + else: + result += 1 + return result + + +if __name__ == '__main__': + solution = Solution() + print(solution.lengthOfLastWord("Hello World"), "= 5")