Leetcode刷题【每日n题】(2)

🥚今日鸡汤🥚

                                        修仙之道,需有勇气和决心,方能战胜一切困难。

                                                                                                                ——《斗破苍穹》

目录

1.题目一

2.思路分析

3.代码实现

4.题目二

5.思路分析

6.代码实现


 

1.题目一

16. 最接近的三数之和

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

2.思路分析

  • 1.为了后序避免重复,先从小到大排序
  • 2.假设前三个数之和s,即为答案之解
  • 3.先固定一个值,在使用双指针排查
  • 4.计算三数之和sum,让s与sum比较与目标值之间的距离
  • 5.如果sum<target,L++;
  • 6.如果sum>target,R--;

3.代码实现

 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;
    }

4.题目二

26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

5.思路分析

  • 1.将重复的元素移到右边
  • 2.使用双指针L,R,一前一后
  • 3.当arr[L]!=arr[R],将arr[L+1]=arr[R],并将L指针和R指针同时后移
  • 4.当arr[L]==arr[R],只需要将R指针后移即可

6.代码实现

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;
    }

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会敲代码的小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值