題目1
統(tǒng)計(jì)字符串中的單詞個(gè)數(shù),這里的單詞指的是連續(xù)的不是空格的字符。
請(qǐng)注意,你可以假定字符串里不包括任何不可打印的字符。
示例:
輸入: "Hello, my name is John"
輸出: 5
解答
class Solution(object):
def countSegments(self, s):
"""
:type s: str
:rtype: int
"""
return len(s.split())
split()函數(shù)可以分割任何符號(hào),包括逗號(hào),句號(hào),什么亂七八糟的符號(hào)。相比較來(lái)說,其他語(yǔ)言可沒有這么簡(jiǎn)潔的用法。
題目2
給定一個(gè) n 個(gè)元素有序的(升序)整型數(shù)組 nums 和一個(gè)目標(biāo)值 target ,寫一個(gè)函數(shù)搜索 nums 中的 target,如果目標(biāo)值存在返回下標(biāo),否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現(xiàn)在 nums 中并且下標(biāo)為 4
示例 2:
輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1
提示:
- 你可以假設(shè) nums 中的所有元素是不重復(fù)的。
- n 將在 [1, 10000]之間。
- nums 的每個(gè)元素都將在 [-9999, 9999]之間。
解答
剛開始我沒有看見題目,自己一看這么簡(jiǎn)單,順手就寫了
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target in nums:
return nums.index(target)
else:
return -1
寫完之后我覺得不對(duì),再看看題目,說的是二分查找。所謂二分查找就是把列表一分為二,在左右兩邊查找,確定元素區(qū)間之后再次一分為二,直至確定元素。
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left, right = 0, len(nums)-1
while (left <= right):
mid = (left+right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid -1
else:
left = mid + 1
return -1
這才是這道題要考察的二分查找。
查看執(zhí)行結(jié)果36ms。