69. x 的平方根
题目描述:
给你一个非负整数
x
,计算并返回x
的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如
pow(x, 0.5)
或者x ** 0.5
。输入:x = 8 输出:2 解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
解题思路:
二分法查找,最大就是这个数本身,最小是0,然后判断值的平方和x的值的对比
解法一:
function mySqrt(x) {
// 最大值就是自己
let max = x;
// 最小值是0
let min = 0;
while (max > min ) {
// 获取中间的值,并取整
let mid = +((max + min) / 2).toFixed(0);
// 如果中间的值和max,min一致,就通过比较,如果min取平方的值小于等于目标值并且最大值平方大于目的值,直接返回最小值
if (mid === max || mid === min) {
return min * min <= x && max * max > x ? min : max
}
// 后面是二分正常操作
if (mid * mid < x) {
min = mid;
} else if (mid * mid > x) {
max = mid;
} else {
return mid;
}
}
return min;
}
用时:
- Your runtime beats 37.74 % of typescript submissions
- Your memory usage beats 96.57 % of typescript submissions (43.7 MB)
83. 删除排序链表中的重复元素
题目描述:
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表输入:head = [1,1,2] 输出:[1,2]
解题思路:
遍历链表,已经是有序了,就前后比较就好了
function deleteDuplicates(head: ListNode | null): ListNode | null {
// 判断头节点为空
if (!head) {
return head;
}
// 指针记录位置
let pointer = head;
while (pointer.next) {
// 前后值相同就跳过这个值
if (pointer.val === pointer.next.val) {
pointer.next = pointer.next.next;
} else {
// 不同指针往前走
pointer = pointer.next;
}
}
return head;
};
- Your runtime beats 96.6 % of typescript submissions
- Your memory usage beats 79.62 % of typescript submissions (43.9 MB)