算法 - 数学

算法 - 数学

sqrt 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int sqrt(int x) {
if (x == 0)
return 0;
int left = 1, right = Integer.MAX_VALUE;

while (true) {
int mid = left + (right - left)/2;
if (mid > x/mid) {
right = mid - 1;
} else {
if (mid + 1 > x/(mid + 1))
return mid;
left = mid + 1;
}
}
}

数组选择几个数求最大乘积问题

一般这种问题,几个数字相乘的,最小和最大的数字都需要记录,网友给出的解决方案

三个数的最大乘积,要么是最大的三个数的乘积,要么是最小的两个数乘以最大那个数的乘积。

1
2
3
4
5
6
7
8
class Solution {
public int maximumProduct(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
return Math.max(nums[n-1] * nums[n-2] * nums[n-3],
nums[n-1] * nums[0] * nums[1]);
}
}

推荐文章