算法题 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
原文地址:https://www.cnblogs.com/XinL-blog/p/11637961.html