当前位置:网站首页>[二分查找简单题] LeetCode 35. 搜索插入位置,69. x 的平方根,367. 有效的完全平方数,441. 排列硬币
[二分查找简单题] LeetCode 35. 搜索插入位置,69. x 的平方根,367. 有效的完全平方数,441. 排列硬币
2022-07-27 00:21:00 【哇咔咔负负得正】
LeetCode 35. 搜索插入位置
https://leetcode.cn/problems/search-insert-position/
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
nums 为 无重复元素 的 升序 排列数组
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
Solution
int searchInsert(int* a, int n, int target){
int l = 0, r = n - 1;
int ans = n;
int mid;
while (l <= r) {
mid = (l + r) / 2;
if (a[mid] >= target) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
return ans;
}
LeetCode 69. x 的平方根
https://leetcode.cn/problems/sqrtx
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去 。
要求不能用 sqrt(x) 和 pow(x, 0.5)。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
Solution
int mySqrt(int x){
long long l = 0, r = x, mid, ans;
while (l <= r) {
mid = (l + r) / 2;
if (mid * mid <= x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
LeetCode 367. 有效的完全平方数
https://leetcode.cn/problems/valid-perfect-square
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
示例 1:
输入:num = 16
输出:true
示例 2:
输入:num = 14
输出:false
Solution
bool isPerfectSquare(int num){
long long l = 0, r = num, mid, temp;
while (l <= r) {
mid = (l + r) / 2;
temp = mid * mid;
// 多加一个判定条件即可
if (temp == num) {
return true;
} else if (temp < num) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return false;
}
另外一种更方便的做法:直接在 69 题基础上直接在返回值做判断即可
bool isPerfectSquare(int num){
long long l = 0, r = num, mid, ans;
while (l <= r) {
mid = (l + r) / 2;
if (mid * mid <= num) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans * ans == num;
}
LeetCode 441. 排列硬币
https://leetcode.cn/problems/arranging-coins
你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行可能是不完整的。
给你一个数字 n ,计算并返回可形成完整阶梯行的总行数。
输入:n = 5
输出:2
解释:因为第三行不完整,所以返回 2 。
输入:n = 8
输出:3
解释:因为第四行不完整,所以返回 3 。
Solution
暴力法:
int arrangeCoins(int n){
int i;
for (i = 1; n >= i; i++) {
n -= i;
}
return i - 1;
}
二分法:
其实就是二分找 i 的过程
整 i 层或者整 i 层外加多余的不完整的下一层,求得的结果都是 ans = i
即满足 i * (i + 1) / 2 <= n < i * (i + 1) / 2 + (i + 1), 求得 ans = i
int arrangeCoins(int n){
long long ans = 0, l = 1, r = n, mid;
while (l <= r) {
mid = (l + r) / 2;
if (mid * (mid + 1) / 2 <= n) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
数学法:
先假设 n 能完整排列 x 层阶梯,即 x ( x + 1 ) 2 = n \frac{x(x+1)}{2} = n 2x(x+1)=n
化成一元二次方程: x 2 + x − 2 n = 0 x^2 + x - 2n = 0 x2+x−2n=0
解方程: x 1 = − 1 + 8 n + 1 2 , x 2 = − 1 − 8 n + 1 2 x_1 = \frac{-1+\sqrt{8n+1}}{2}, x_2 = \frac{-1-\sqrt{8n+1}}{2} x1=2−1+8n+1,x2=2−1−8n+1
由于 x 2 < 0 x_2 \lt 0 x2<0 不符合条件,故取 ⌊ x 1 ⌋ \lfloor x_1 \rfloor ⌊x1⌋ 为所求的解。
int arrangeCoins(int n){
return (int) ((sqrt(8 * (long long)n + 1) - 1) / 2);
}
边栏推荐
- Leetcode skimming -- no.238 -- product of arrays other than itself
- Arduinouno drive RGB module full color effect example
- 论构造函数的原型是谁
- 信息收集-端口扫描工具-Nmap使用说明
- Mysql 5.7 取分组第一条
- 小程序怎样助力智能家居生态新模式
- MySQL 5.7 takes the first item of the group
- Tabbar of customized wechat applet on uni app
- setTimeout第一个参数应该注意的地方
- Rust Web(一)—— 自建TCP Server
猜你喜欢

Web3.0世界知识体系分享-什么是Web3.0

杀毒软件 clamav 的安装和使用

Invalid target distribution: solution for 17

论构造函数的原型是谁

Greed - 376. Swing sequence

Okaleido tiger logged into binance NFT on July 27, and has achieved good results in the first round

F8 catch traffic, F9 catch rabbits, f10turttle

Cloud development sleeping alarm clock wechat applet source code

对象创建的流程分析

If you want to thoroughly optimize the performance, you must first understand the underlying logic~
随机推荐
How to do the system security test? Let's talk about it in detail
MySQL 5.7 takes the first item of the group
C language: deep learning recursion
贪心——376. 摆动序列
机器学习【Matplotlib】
聊聊连接池和线程
Use of formdata
Okaleido Tiger 7.27日登录Binance NFT,首轮已获不俗成绩
F8 catch traffic, F9 catch rabbits, f10turttle
数据库读写分离和分库分表
What did kubedmin do?
Arduino UNO +74HC164流水灯示例
ansible系列之:不收集主机信息 gather_facts: False
[nisactf 2022] upper
CS224W fall 1.2 Applications of Graph ML
快速排序(Quick sort)
Web3.0世界知识体系分享-什么是Web3.0
Cs224w fall course - --- 1.1 why graphs?
Rust web (I) -- self built TCP server
Mysql 5.7 取分组第一条