🥚今日鸡汤🥚
????????????????????????????????????????修仙之道,需有勇气和决心,方能战胜一切困难。
????????????????????????????????????????????????????????????????????????????????????????????????????????????????——《斗破苍穹》
目录
?
给你一个长度为?
n
?的整数数组?nums
?和 一个目标值?target
。请你从?nums
?中选出三个整数,使它们的和与?target
?最接近。返回这三个数的和。
假定每组输入只存在恰好一个解。
- 1.为了后序避免重复,先从小到大排序
- 2.假设前三个数之和s,即为答案之解
- 3.先固定一个值,在使用双指针排查
- 4.计算三数之和sum,让s与sum比较与目标值之间的距离
- 5.如果sum<target,L++;
- 6.如果sum>target,R--;
public int getSum(int[] array, int target) {
Arrays.sort(array);//从小到大排序
int s = array[0] + array[1] + array[2];//假设s即为答案的解
for (int i = 0; i < array.length; i++) {//先固定一个值
int L = i + 1, R = array.length - 1;//定义左右指针
while (L < R) {
int sum = array[i] + array[L] + array[R];
if (Math.abs(target - sum) < Math.abs(target - s)) {//与目标值之间的距离
s = sum;
} else if (sum < target) {
L++;
} else if (sum > target) {
R--;
} else {
return s;
}
}
}
return s;
}
给你一个?非严格递增排列?的数组?
nums
?,请你?原地?删除重复出现的元素,使每个元素?只出现一次?,返回删除后数组的新长度。元素的?相对顺序?应该保持?一致?。然后返回?nums
?中唯一元素的个数。考虑?
nums
?的唯一元素的数量为?k
?,你需要做以下事情确保你的题解可以被通过:
- 更改数组?
nums
?,使?nums
?的前?k
?个元素包含唯一元素,并按照它们最初在?nums
?中出现的顺序排列。nums
?的其余元素与?nums
?的大小不重要。- 返回?
k
?。
- 1.将重复的元素移到右边
- 2.使用双指针L,R,一前一后
- 3.当arr[L]!=arr[R],将arr[L+1]=arr[R],并将L指针和R指针同时后移
- 4.当arr[L]==arr[R],只需要将R指针后移即可
public int getArr(int[] array) {
if (array == null || array.length == 0) {
return 0;
}
int L = 0, R = 1;
while (R < array.length) {
if (array[L] != array[R]) {
array[L + 1] = array[R];
L++;
}
R++;
}
return L + 1;
}