- x的平方根(*)
思路:由于x的平方根的整数部分是满足k^2≤x 的最大k值,因此我们可以对 k 进行二分查找,从而得到答案。使用二分法,不断缩小范围
class Solution {
public int mySqrt(int x) {
int l = 0, r = x, ans = -1;
while (l <= r) {
int mid = (r + l) / 2;
if ((long) mid * mid <= x) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}
- 爬楼梯
思路:设爬第i个台阶可选的方案个数为f(i),则f(i)=f(i+1)+f(i+2)。初始置f(n)为1,f(n-1)为2,从后往前遍历,结果f(i)用数组存储。
class Solution {
public int climbStairs(int n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int a[] = new int[n];
a[n - 1] = 1;
a[n - 2] = 2;
for (int i = n - 3; i >= 0; i--) {
a[i] = a[i + 1] + a[i + 2];
}
return a[0];
}
}
- 删除排序链表中的重复元素(*)
思路:当L结点与其下一个结点的值相同时,将L的next链接到L的next的next,否则L=L.next(注意:while循环中要判断L.next是否为nul)
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode l = head;
while (l!= null) {
if(l.next==null){
return head;
}
if (l.val == l.next.val) {
l.next = l.next.next;
} else {
l = l.next;
}
}
return head;
}
}