第一题:
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。
class Solution {
public int arrangeCoins(int n) {
int l = 1;
int r = n;
while(l<r){
int mid = l+(r-l+1)/2;
if((long)mid*(mid+1)>(long)2*n){
r = mid -1;
}else if((long)mid*(mid+1)==(long)2*n){
return mid;
}else{
l = mid;
}
}
return l;
}
}
第二题:
给你一个 严格升序排列 的正整数数组 arr
和一个整数 k
。
请你找到这个数组里第 k
个缺失的正整数。
class Solution {
public int findKthPositive(int[] arr, int k) {
if (arr[0] > k) {
return k;
}
int l = 0, r = arr.length;
while (l < r) {
int mid = (l + r) >> 1;
int x = mid < arr.length ? arr[mid] : Integer.MAX_VALUE;
if (x - mid - 1 >= k) {
r = mid;
} else {
l = mid + 1;
}
}
return k - (arr[l - 1] - (l - 1) - 1) + arr[l - 1];
}
}