森田賢二のleetCodeの使い方、解説、解答を毎日更新しているキャラクター

[leetcode]問題解答と解説。704. Binary Search [JavaScript]

[leetcode]問題解答と解説。704. Binary Search [JavaScript]

皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます

私はある決意をして今挑んでいます。
モチベーションを保つためだけにこれをやっています。

では今日のleetCode。
【704. Binary Search】の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。

※下にある自分のコードは自分で設けた制限時間内に書けたところまです。

これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。

森田賢二のleetCode
森田賢二のleetCode

[leetcode] 704. Binary Search ルール

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

You must write an algorithm with O(log n) runtime complexity.

昇順にソートされた整数の配列numsと整数のtargetが与えられたとき, numsからtargetを検索する関数を書きなさい.targetが存在する場合、そのインデックスを返す。そうでなければ -1 を返す。

実行時の計算量がO(log n)であるアルゴリズムを書け.

Example 1:

Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

exampleは実際の問題ページを見てください

[leetcode] 704. Binary Search 問題ページ

704. Binary Search

[leetcode] 704. Binary Search

my code is not good

function search(nums, target) {
    let last = nums.length -1;
    // -5
    let first = 0
    while(first < last){
        let mid = Math.floor((last - first) / 2) + 1
        if(nums[mid] === target) return mid
        if(nums[mid] < target){
            first = mid   
            continue;
        }
        last = mid
    }
    return -1
};

search([-1, 0, 3, 5, 9, 12], 9)

時間切れ。last - firstの所だった、、

[leetcode] 704. Binary Search。discussの中の一つの解答例

数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれない

JavaScriptでfilterされている、discussはこちらから

var search = function(nums, target) {
    let start = 0,end = nums.length-1
    while(start <= end){
        let mid = Math.floor((start+end)/2)
        if(nums[mid] == target){
            return mid
        }else if(nums[mid] < target){
            start = mid+1
        }else{
            end = mid-1
        }
    }
    return -1
};

[leetcode] 704. Binary Searchをやってみて感想

  • 悔しい

カテゴリー leetCode