1064. Fixed Point
Дан 配列 различных целых чисел 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 表示.