概述
Longest Substring Without Repeating Characters
找无相同字符的最长子串,o(n)暴力判断即可
class Solution {
public:
int a[300];
int lengthOfLongestSubstring(string s) {
int len=s.length();
if(len==0) return 0;
memset(a,0,sizeof(a));
int ans=1;
int sum=1;
a[s[0]]=1;
for(int i=1;i<len;i++)
{
int shit=s[i];
if(sum+1>i-a[s[i]]+1)
sum=i-a[s[i]]+1;
else
sum++;
// cout<<sum<<" "<<i-a[s[i]]+1<<endl;
if(sum>ans) ans=sum;
a[shit]=i+1;
}
return ans;
}
};
16. 3Sum Closest
对于给定整数,在给定数组中寻找三个数的和,使得这个和最接近这个整数
显然二分即可
class Solution {
public:
int mx= 0x7fffffff;
int bs(vector<int>& a,int left,int right,int tar)
{
int x=left,y=right;
while(left<=right)
{
int mid=(left+right)>>1;
if(a[mid]>tar)
right=mid-1;
else
left= mid+1;
}
//cout<<left-1;
int shit,fuck;
shit=fuck=mx;
if(left-1>=x)
shit=tar-a[left-1];
if(left<=y)
fuck=a[left]-tar;
if(shit<fuck)
return left-1;
else
return left;
}
int fb(int x)
{
if(x>0)
return x;
return -x;
}
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int len=nums.size();
int ans=mx;
int x=0;
for(int i=0;i<len;i++)
x+=nums[i];
for(int i=0;i<len;i++)
{
int sum=nums[i];
for(int j=i+1;j<len-1;j++)
{
sum+=nums[j];
int shit=bs(nums,j+1,len-1,target-sum);
shit=nums[shit];
// cout<<ans<<endl;
if(ans>fb(target-shit-sum))
{
ans=fb(target-shit-sum);
x=shit+sum;
}
sum-=nums[j];
}
}
return x;
}
};
14. Longest Common Prefix
找一系列字符串的公共子串,直接暴力
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int len=strs.size();
if(len==0)
{
string ans="";
return ans;
}
string ans=strs[0];
int j;
for(j=0;j<ans.length();j++)
{
int i;
for(i=1;i<len;i++)
if(ans[j]!=strs[i][j])
break;
if(i<len)
{
break;
}
}
ans=ans.substr(0,j);
return ans;
}
};
转载于:https://www.cnblogs.com/bitch1319453/p/6661463.html
最后
以上就是顺利大白为你收集整理的leetcode.水题*3的全部内容,希望文章能够帮你解决leetcode.水题*3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复