给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。
class Solution(object):
def reverseWords(self, s):
arr = []
word = ''
for i in range(len(s)):
if s[i] != ' ':
word += s[i]
else:
if s[i - 1] != ' ' and word != '':
arr.append(word)
word = ''
if word != '':
newWord = word.replace(" ", "")
arr.append(newWord)
arr.reverse()
print(arr)
rstr = ' '.join(arr)
return rstr
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请不要使用除法,且在 O(n) 时间复杂度内完成此题。
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
class Solution(object):
def productExceptSelf(self, nums):
# 双指针
ans = len(nums)*[1]
left, right = 1, 1
for i in range(len(nums)):
ans[i] *= left
ans[len(nums)-1-i] *= right
left *= nums[i]
right *= nums[len(nums)-1-i]
return ans
不让用除法真是没有一点思路,参考了评论区大神,还是6啊
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
注意:三元组序列的下标可以不连续
输入:nums = [2,1,5,0,4,6]
输出:true
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6
自己写的错误代码(71/79)
class Solution(object):
def increasingTriplet(self, nums):
matrix = [[nums[0]]]
row = []
for i in range(1, len(nums)):
flag = 0
for j in matrix:
if j[-1] < nums[i]:
j.append(nums[i])
flag = 1
if flag == 0:
row.append(nums[i])
matrix.append(row)
row = []
for j in matrix:
if len(j) >= 3:
return True
return False
维护两个变量first=nums[0], second趋于正无穷
贪心:在first 官方题解:class Solution(object):
def increasingTriplet(self, nums):
first, second = nums[0], float('inf')
n = len(nums)
if n < 3:
return False
for i in range(1, n):
if nums[i] > second:
return True
if nums[i] > first:
second = nums[i] # 让second尽可能小
if nums[i] < first:
first = nums[i]
return False