LeetCodeに毎日挑戦してみた 35. Search Insert Position(Python、Go)


はじめに

無料英単語サイトE-tanを運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

Leetcodeとは

leetcode.com
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

10問目(問題35)

35. Search Insert Position

  • 問題内容

Given a sorted array of distinct integers 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.

(日本語訳)

個別の整数のソートされた配列とターゲット値が与えられた場合、ターゲットが見つかった場合はインデックスを返します。そうでない場合は、順番に挿入された場合のインデックスを返します。

**

Example 1:

  Input: nums = [1,3,5,6], target = 5
  Output: 2

Example 2:

  Input: nums = [1,3,5,6], target = 2
  Output: 1

Example 3:

  Input: nums = [1,3,5,6], target = 7
  Output: 4

Example 4:

  Input: nums = [1,3,5,6], target = 0
  Output: 0

Example 5:

  Input: nums = [1], target = 0
  Output: 0

考え方

  1. バイナリーサーチを使って実装しました

  2. midとターゲットを比較して二分探索していきます

  3. 範囲を絞っていき、見つかったらreturnします

  • 解答コード
def searchInsert(self, nums, target): # works even if there are duplicates. 
    l , r = 0, len(nums)-1
    while l <= r:
        mid=(l+r)/2
        if nums[mid] < target:
            l = mid+1
        else:
            if nums[mid]== target and nums[mid-1]!=target:
                return mid
            else:
                r = mid-1
    return l
  • Goでも書いてみます!
func searchInsert(nums []int, target int) int {
    l := 0
    r := len(nums) - 1
    for (r >= l) {
        mid := l + (r - l) / 2
        if (nums[mid] == target) {
            return mid
        } else if (nums[mid] > target) {
            r = mid - 1;

        } else {
            l = mid + 1;
        }
    }
    return l
}