算法题 week4
35# 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
思路:遍历数组,找到目标值或发现第一个大于目标值的值,则返回当前位置,未找到则返回数组长度
class Solution { public int searchInsert(int[] nums, int target) { int i = 0; while(i<nums.length){ if(nums[i]>=target){ return i; } i = i+1; } return nums.length; } }
py3:
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: flag = 0 for num in nums: flag+=1 if num>=target: return flag return len(nums)
看到评论区的一个另一种方式,要学会使用函数
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: if target in nums: return nums.index(target) else: nums.append(target) nums.sort() return nums.index(target)
38# 报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
太难了,没看懂,题解代码先贴这,钻研一下。
from itertools import groupby class Solution: def countAndSay(self, n: int) -> str: result = '1' for i in range(1, n): result = ''.join([str(len(list(g))) + k for k, g in groupby(result)]) return result