- 长臂猿-企业应用及系统软件平台
用外挂在麦德龙app上抢茅台酒,哥们儿不仅抢,还抢得有模有样,四个月下来,居然囤积了248瓶!你说牛不牛? 我知道这个违法,但没想到还挺严重的。 中国裁判文书网上的公告:这位兄弟因为非法获取计算机信息系统数据罪,被判有期徒刑三年,缓刑三年六个月,还得掏腰包交3万元罚金。 那些辛辛苦苦抢来的茅台,加上赚的那点油水,90591元,全得上交国库。连他那块固态硬盘也没收了。 说真的平时我都是在i茅台app上预约抢购,那难度,一年能碰上一两瓶就得笑开花了。但这位兄弟决定走捷径,结果呢,直接反撸了。 所以呀,占便宜吃大亏,咱们还是老老实实的,该怎么抢就怎么抢,反正也不差那一两瓶酒。 最重要的是,做人得有底线,别为了一时的利益,最后搭上自己的自由,那就得不偿失了。 下面是今日算法题
今日算法题,来自LeetCode的第16题:最接近的三数之和,下面是我的算法思路及实现,让我们来看看吧。 算法题目 给定一个包含 `n` 个整数的数组 `nums` 和一个目标值 `target`,找出 `nums` 中的三个整数,使得它们的和最接近 `target`。返回这三个数的和。假定每组输入只存在唯一答案。 算法思路
排序:首先对数组进行排序,这有助于后续的双指针遍历。 初始化:定义一个变量来存储最接近 target 的三数之和,初始可以设置为数组前三个数的和。 双指针遍历:遍历数组,对于每个元素,使用双指针在其之后的部分寻找两个数,通过比较和 target 的差值来更新最接近的和。 调整双指针:如果三数之和大于 target,移动右指针;如果小于 target,移动左指针;如果等于 target,直接返回 target,因为不能更接近了。 更新最接近和:在遍历过程中,不断更新最接近 target 的三数之和。 代码实现 C语言实现
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int threeSumClosest(int* nums, int numsSize, int target) {
qsort(nums, numsSize, sizeof(int), compare);
int closest = nums[0] + nums[1] + nums[2];
for (int i = 0; i < numsSize - 2; i++) {
int left = i + 1, right = numsSize - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (abs(target - sum) < abs(target - closest)) {
closest = sum;
}
if (sum > target) {
right--;
} else if (sum < target) {
left++;
} else {
return sum;
}
}
}
return closest;
}
Java实现
import java.util.Arrays;
public class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int closest = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.length - 2; i++) {
int left = i + 1, right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (Math.abs(target - sum) < Math.abs(target - closest)) {
closest = sum;
}
if (sum > target) {
right--;
} else if (sum < target) {
left++;
} else {
return sum;
}
}
}
return closest;
}
}
Python实现
def three_sum_closest(nums, target):
nums.sort()
closest = sum(nums[:3])
for i in range(len(nums) - 2):
r = i + 1, len(nums) - 1
while l < r:
current_sum = nums[i] + nums[l] + nums[r]
if abs(target - current_sum) < abs(target - closest):
closest = current_sum
if current_sum > target:
r -= 1
elif current_sum < target:
l += 1
else:
return current_sum
return closest
算法解析
通过排序和双指针技术,我们可以有效地找到最接近目标值的三数之和。这种方法比暴力枚举所有可能的三元组要高效得多,因为它避免了不必要的比较,并且能够在找到最优解后立即停止搜索。 示例和测试 对于数组 nums = [-1, 2, 1, -4] 和目标值 target = 1,最接近的三数之和为 2(元素组合是[-1, 2, 1])。 总结 最接近的三数之和问题是一个典型的双指针问题,通过排序和双指针遍历的方式,我们可以有效地找到最接近给定目标值的三元组。这种方法的空间复杂度低,时间复杂度为 O(n^2),适用于处理中等规模的数据集。 大家好,我是鬼哥,一个深挖AI领域的程序员,自主研发的AI项目在2023年成都市重庆市联合举办的《创新创业大赛》中荣获二等奖,获得专家团队一致好评! 2023年可以说是AI爆发的一年,AI的强大已经足以颠覆我们的工作和生活,如果以前是互联网+,那么现在及未来就是AI+,所以你已经在通过AI来赋能了吗? 说真的AI带给我们的冲击太大,我们深刻的感知到:未来淘汰你的不一定是AI,但一定是会使用AI的人。 在不远的未来,AI必然代替人类大部分的工作。打败你的不是对手,颠覆你的不是同行! 我和我的团队,打造了这门关于AI的实操课程带你从小白成为ChatGPT专家,10倍提升业务生产力。 现在买教程立即送ChatGPT独立账号,支持修改密码,无需等待! 扫描下方二维码,购买《AI实战课程》,送ChatGPT独享账号! 推荐阅读: 1.离谱!X为员工请假一天,代价是3700 2.GPTs测评 - Hot Mods:把你的图像修改成真正狂野的东西 3.牛逼!AI诊癌,正式落地。。