最接近的三数之和
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;
}
}