「 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
提交結果以下:調試
雖然結果經過了,但不得不說代碼寫的很囉嗦,但就是這個囉嗦的代碼也是一步一步調試,瞭解計算機每一步怎麼走才勉強寫出來的,所以編程之路真是路漫漫啊。這裏要說明的問題就是,知道計算機每一步是怎麼運行的,也就是說養成一種面向計算機編程的思想,下面就我遇到的問題來記錄參考一下(不具備表明性,面向新手向)。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 刷題初體驗就到這裏了,須要學習的真是太多了。爭取在下一篇給出優化解法。
若有不足,歡迎指正。