【数据结构与算法】双指针——其它

最接近的三数之和

LeetCode:最接近的三数之和

题目描述:

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

思想:

时间复杂度O(n^2),外层遍历数组,内层双指针首尾相向遍历,找出最合适的三数之和。

代码:

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int twoTarget,low,high,sum=nums[0]+nums[1]+nums[2];
        for(int i=0;i<nums.length;++i){
            twoTarget = target - nums[i];
            high = nums.length-1;
            low = i+1;
            while(high>low){
                sum = Math.abs(nums[i]+nums[low]+nums[high]-target)<Math.abs(sum-target)?(nums[i]+nums[low]+nums[high]):sum;
                if(nums[low]+nums[high]<twoTarget){
                    ++low;
                }else if(nums[low]+nums[high]>twoTarget){
                    --high;
                }else{
                    return sum;
                }
            }
        }
        return sum;
    }
}

通过删除字母匹配到字典里最长单词

LeetCode:通过删除字母匹配到字典里最长单词

题目描述:

给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。

示例:

示例 1:

输入:
s = "abpcplea", d = ["ale","apple","monkey","plea"]

输出: 
"apple"

示例 2:

输入:
s = "abpcplea", d = ["a","b","c"]

输出: 
"a"

思想:

第11行那个判断语句,不拿笔画一画,想破脑袋也写不出来

代码:

class Solution {
    public String findLongestWord(String s, List<String> d) {
        String res ="";
        for(int i=0;i<d.size();++i){
            String str = d.get(i);
            int pos=-1;
            for(int j=0;j<str.length();++j){
                pos = s.indexOf(str.charAt(j),pos+1);
                if(pos==-1) break;
            }
            if(pos==-1||str.length()<res.length()||str.length()==res.length()&&str.compareTo(res)>0)
                continue;
            res=str;
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/buptleida/p/12651786.html