【Leetcode刷题】第 35 题:Search Insert Position 搜索插入位置——解题篇

「 Leetcode刷题 」系列,仅为刷题过程当中对于算法和编程的思考与记录,若是对你有帮助欢迎点赞收藏。博主也在探索刷题过程当中,记录的一些知识点可能很小白,所以主要是想作一个记录。文中的不足请多担待。python

刷题顺序按专题来作,这部分是关于数组的,所用语言主要为python3。每题将分为解题篇总结篇两篇,一篇是博主本身的解法,一篇是学习你们解法后的总结。算法


数组部分

题目

英文:编程

Given a sorted array and a target value, return the index if the
target is found. If not, return the index where it would be if it were
inserted in order.

You may assume no duplicates in the array.数组

中文:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。若是目标值不存在于数组中,返回它将会被按顺序插入的位置。学习

你能够假设数组中无重复元素。测试

示例 1:

输入: [1,3,5,6], 5
输出: 2
示例 2:

输入: [1,3,5,6], 2
输出: 1
示例 3:

输入: [1,3,5,6], 7
输出: 4
示例 4:

输入: [1,3,5,6], 0
输出: 0

解题过程

对于这道题,我一开始的想法是先解决目标值在数组中的状况,而后解决目标值不在数组中的状况。想法也很简单,用for循环遍历数组查找是否相等;若是目标值不存在数组中,则经过比较大小,把它放到合适的位置。优化

最终代码实现以下:spa

class Solution:
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """

        for i in range(len(nums)):
            if target == nums[i]:
                print(i)
                return i

        # 直接跳出for循环,说明target不存在于nums中
        if target > nums[i]:
            print(i+1)
            return i+1
        elif target < nums[0]:
            print(0)
            return 0
        else:
            for i in range(len(nums)):
                if target > nums[i] and target < nums[i+1]:
                    print(i+1)
                    return i+1

提交结果以下:
clipboard.png调试

虽然结果经过了,但不得不说代码写的很啰嗦,但就是这个啰嗦的代码也是一步一步调试,了解计算机每一步怎么走才勉强写出来的,所以编程之路真是路漫漫啊。这里要说明的问题就是,知道计算机每一步是怎么运行的,也就是说养成一种面向计算机编程的思想,下面就我遇到的问题来记录参考一下(不具备表明性,面向新手向)。code

一、在数组范围这里for i in range(len(nums))这条语句,在 python 中会依次遍历数组,直到全部的数组元素遍历完,而后退出循环,因此这里写成range(len(nums)),固然有更简单的方法,咱们以后说。

二、当for循环结束时未返回任何值,程序直接跳出for循环,执行下一步语句,说明target不存在于nums中,所以我在下面用了if的判断语句对边界条件进行判断。

三、目标值不在数组中的状况,必须排除掉以前的状况才可,if target > nums[i] and target < nums[i+1]这句语句一开始我直接放到了整个数组中从新执行,那么就会出现数组下标越界的状况,由于它包含了上面的状况,这时候对于测试用例子输入: [1,3,5,6], 7 输出: 4这种状况就会有问题。对于咱们人来讲,进行从新判断的想法是很天然的,但在计算机中机就不能直接进行判断,而会致使错误的结果,因此不能想固然的写下语句,而是学会怎么向计算机同样思考。

四、在 python 中不一样于 C 语言中连续的if else,用了elif来代替。

五、print语句仅仅是打印值,而不会返回任何值,题目里要求的是要输出一个值,因此须要return

六、最后,对于 leetcode 刷题有一些注意的地方。咱们看这道题的测试用例,其实颇有考究。总共 4 条,第 1 条是目标值在数组中的状况,其他 3 条是目标值不在数组中,第 2 条是目标值应该被放到数组中间,第 3 和 4 条是放到数组两边。所以须要关注这些测试用例,在单机上逐个测试成功后再提交。由于题目中只要求返回索引,并不要求插到数组中,因此应该说又简化了一些,是一道简单题目。


关于 Leetcode 刷题初体验就到这里了,须要学习的真是太多了。争取在下一篇给出优化解法。


若有不足,欢迎指正。

相关文章
相关标签/搜索