面试题62. 圆圈中最后剩下的数字
class Solution {
public int lastRemaining(int n, int m) {
ArrayList<Integer> list = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
list.add(i);
}
int idx = 0;
while (n > 1) {
idx = (idx + m - 1) % n;
list.remove(idx);
n--;
}
return list.get(0);
}
}
class Solution {
public int lastRemaining(int n, int m) {
int ans = 0;
// 最后一轮剩下2个人,所以从2开始反推
for (int i = 2; i <= n; i++) {
ans = (ans + m) % i;
}
return ans;
}
}
class Solution {
public int lastRemaining(int n, int m) {
return n == 1 ? 0 : (lastRemaining(n - 1, m) + m) % n;
}
}
class Solution {
public int lastRemaining(int n, int m) {
if(n == 2) {
if(m % 2 == 0) {
return 0;
} else {
return 1;
}
}
return (lastRemaining(n-1, m) + m) % n;
}
}
面试题66. 构建乘积数组
//超时啦,hahhah
class Solution {
public int[] constructArr(int[] a) {
int[] arr = new int[a.length];
for(int i=0;i<a.length;i++){
int res = 1;
for(int j=0;j<a.length;j++){
if(i==j){
res *=1;
}else{
res *= a[j];
}
}
arr[i] = res;
}
return arr;
}
}
class Solution {
public int[] constructArr(int[] a) {
int n = a.length;
int[] B = new int[n];
for (int i = 0, product = 1; i < n; product *= a[i], i++) /* 从左往右累乘 */
B[i] = product;
for (int i = n - 1, product = 1; i >= 0; product *= a[i], i--) /* 从右往左累乘 */
B[i] *= product;
return B;
}
}
class Solution {
public int[] constructArr(int[] a) {
int n = a.length;
int[] B = new int[n];
for(int i = 0,product = 1;i < n;i++){
B[i] = product;
product *= a[i];
}
for(int i = n-1,product = 1;i >= 0;i--){
B[i] *= product;
product *= a[i];
}
return B;
}
}
面试题45. 把数组排成最小的数
- Java8的新特性 lambda表达式(闭包):
Collections.sort(listStr,(s1,s2)->(s1+s2).compareTo(s2+s1));
class Solution {
public String minNumber(int[] nums) {
List<String> list = new ArrayList<>();
for (int num : nums) {
list.add(String.valueOf(num));
}
list.sort((o1, o2) -> (o1 + o2).compareTo(o2 + o1));
return String.join("", list);
}
}
你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步