1064. Fixed Point

LeetCode easy original: C# #array #csharp #easy #leetcode #search #sort #two-pointers
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Дан 配列 различных целых чисел arr, sorted в порядке возрастания. return наименьший индекс i, который удовлетворяет условию arr[i] == i. Если такого индекса нет, return -1.

例:

Input: arr = [-10,-5,0,3,7]

Output: 3

Explanation: For the given array, arr[0] = -10, arr[1] = -5, arr[2] = 0, arr[3] = 3, thus the output is 3.

C# 解法

照合済み/オリジナル
public class Solution {
    public int FixedPoint(int[] arr) {
        int left = 0, right = arr.Length - 1;
        int answer = -1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (arr[mid] == mid) {
                answer = mid;
                right = mid - 1;
            } else if (arr[mid] < mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return answer;
    }
}
public class Solution {
    public int FixedPoint(int[] arr) {
        int left = 0, right = arr.Length - 1;
        int answer = -1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (arr[mid] == mid) {
                answer = mid;
                right = mid - 1;
            } else if (arr[mid] < mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return answer;
    }
}

C++ 解法

自動ドラフト、提出前に確認
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int FixedPoint(vector<int>& arr) {
        int left = 0, right = arr.size() - 1;
        int answer = -1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (arr[mid] == mid) {
                answer = mid;
                right = mid - 1;
            } else if (arr[mid] < mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return answer;
    }
}
class Solution {
public:
    public int FixedPoint(vector<int>& arr) {
        int left = 0, right = arr.size() - 1;
        int answer = -1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (arr[mid] == mid) {
                answer = mid;
                right = mid - 1;
            } else if (arr[mid] < mid) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return answer;
    }
}

Java 解法

照合済み/オリジナル
class Solution {
    fun fixedPoint(arr: IntArray): Int {
        var left = 0
        var right = arr.size - 1
        var answer = -1
        
        while (left <= right) {
            val mid = (left + right) / 2
            
            if (arr[mid] == mid) {
                answer = mid
                right = mid - 1
            } else if (arr[mid] < mid) {
                left = mid + 1
            } else {
                right = mid - 1
            }
        }
        
        return answer
    }
}

JavaScript 解法

照合済み/オリジナル
var fixedPoint = function(arr) {
    let left = 0, right = arr.length - 1
    let answer = -1
    
    while (left <= right) {
        const mid = Math.floor((left + right) / 2)
        
        if (arr[mid] == mid) {
            answer = mid
            right = mid - 1
        } else if (arr[mid] < mid) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }
    
    return answer
}

Python 解法

照合済み/オリジナル
class Solution:
    def fixedPoint(self, arr: List[int]) -> int:
        left, right = 0, len(arr) - 1
        answer = -1
        
        while left <= right:
            mid = (left + right) // 2
            
            if arr[mid] == mid:
                answer = mid
                right = mid - 1
            elif arr[mid] < mid:
                left = mid + 1
            else:
                right = mid - 1
        
        return answer

Algorithm

Инициализируйте значение left как 0, right как N - 1 и answer как -1.

Пока размер области поиска не равен нулю, то есть left <= right, выполните следующие шаги: find mid как mid = (left + right) / 2. Сравните arr[mid] и mid: если arr[mid] = mid, сохраните mid в answer и перейдите в левую часть, изменив right на mid - 1; если arr[mid] < mid, перейдите в правую часть, изменив left на mid + 1; если arr[mid] > mid, перейдите в левую часть, изменив right на mid - 1.

return answer.

😎

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。