如果数组是单调递增或单调递减的,那么它是 单调 的。
如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
输入:nums = [1,2,2,3]
输出:true
# 最笨的办法,反正就是排序判断是不是单调递增和单调递减
class Solution(object):
def isMonotonic(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
min_nums = sorted(nums)
max_nums = sorted(nums,reverse=True)
if nums == min_nums:
return True
elif nums == max_nums:
return True
else:
return False
return True
今天忙着会议的事情,可是把我累死了!!
给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。
完成所有替换操作后,请你返回这个数组。
输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]
解释:
# 今天是会议第二天,好累啊,没力气解题了,直接看了后面的解析,按照解析写了一遍题目
class Solution(object):
def replaceElements(self, arr):
"""
:type arr: List[int]
:rtype: List[int]
"""
n = len(arr)
ans = [0] * (n - 1) + [-1]
for i in range(n - 2, -1, -1):
ans[i] = max(ans[i + 1], arr[i + 1])
return ans
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
输入:date = “2019-01-09”
输出:9
解释:给定日期是2019年的第九天。
#end 累死了!! 暴力解法
#这个地方有一个是1900年是平年,好吧,小学没学好...有朋友知道的可以帮忙科普一下
class Solution(object):
def dayOfYear(self, date):
"""
:type date: str
:rtype: int
"""
times=[]
for i in date.split('-'):
i = int(i)
times.append(i)
year, month, day = times[0],times[1],times[2]
day1 = [0,31,29,31,30,31,30,31,31,30,31,30]
day2 = [0,31,28,31,30,31,30,31,31,30,31,30]
day_num = day
if year == 1900:
for i in range(1,month):
day_num += day2[i]
elif year % 4 == 0:
for i in range(1,month):
day_num += day1[i]
else:
for i in range(1,month):
day_num += day2[i]
return day_num
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
#这很简单的题目呀,因为只需要输出任意一个重复的元素就可以了,那我们就选第一个
nums = [2, 3, 1, 0, 2, 5, 3]
class Solution(object):
def findRepeatNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
element = []
repetition_element = []
for i in nums:
if i not in element:
element.append(i)
else:
repetition_element.append(i)
break
return repetition_element[0]
#法二
#repetition_element = []
#for i in nums:
# if nums.count(i)>1:
# repetition_element.append(i)
# break
#其实我觉得法二更好一些,但是总是超出时间限制,可能是count的时候会遍历所有元素,
#所以时间复杂度高一点
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
#我的解法有点鸡肋,借用一个参考代码的思路吧,这个pop()函数就很有效的概括出来有效的括号
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
res = 0
stack = [-1]
for i in range(len(s)):
if s[i] == "(":
stack.append(i)
else:
stack.pop()
if not stack: #判断stack中是否为空,True 表示空的
stack.append(i)
else:
res = max(res,i - stack[-1])
return res
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3 x 3^x 3x
输入:n = 27
输出:true
#首先要明白,n <= 0 是不可能作为3的幂次方的,其次循环 %3 即可
class Solution(object):
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
if n <= 0:
return False
else:
while n % 3 == 0:
n //=3
if n == 1:
return True
else:
return False
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
输入: num = 38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
#直接while循环就可以了
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
a = str(num)
while len(a) > 1:
b = 0
for i in a:
b += int(i)
a = str(b)
return int(a)
又是一周结束了。好像明天就是正式开学了,时间真快。