lc282补题👿💩🤡🥶😭😢
wtmd 222
find: 111
find() 用于在指定范围内查找和目标元素值相等的第一个元素。
InputIterator find (InputIterator first, InputIterator last, const T& val);
其中,first 和 last 为输入迭代器,[first, last) 用于指定该函数的查找范围;val 为要查找的目标元素。
正因为 first 和 last 的类型为输入迭代器,因此该函数适用于所有的序列式容器。
另外,该函数会返回一个输入迭代器,当 find() 函数查找成功时,其指向的是在 [first, last) 区域内查找到的第一个目标元素;如果查找失败,则该迭代器的指向和 last 相同。
char stl[] ="abcdefgh";
char * p = find(stl, stl + strlen(stl), 'c');
if (p != stl + strlen(stl)) cout << p << endl;
std::vector<int> h{ 10,20,30,40,50 };
std::vector<int>::iterator it;
it = find(myvector.begin(), myvector.end(), 30);
if (it != myvector.end())
else cout << "查找失败";
string a,b;int post=b.find(a);//从b字符串中查找a字符串,它会返回第一个字符的位置。
string st1("babbabab");cout << st1.find('a', 2) << endl;
algorithm中的find()函数
返回值是目标元素的下标,找不到时返回值为迭代器结尾
string = "hello";
find(s.begin(), s.end(), 'o') == s.end()
string中的与find相关函数
find()
string str1, str2;
char c;
str1.find(str2);//从串str1中查找时str2,返回str2中首个字符在str1中的地址
str1.find(str2,5);//从str1的第5个字符开始查找str2
str1.find(c);//在str1中查找字符o并返回第一个查找到的地址
str1.find("str2",2 , 2);//从str1中的第二个字符开始查找of big的前两个字符
find_if
find_if() 带条件的查找元素,容器元素类型是类的时候,不能使用find函数,只能通过find_if函数来实现。
find_if函数依次的遍历容器的元素,返回第一个使函数为true的元素的迭代器,如果查找失败则返回end迭代器
vector< int >::iterator finda=find_if(vec.begin(),vec.end(),equal_3< int >);
if (finda!=vec.end()).....
count
count函数可以用来统计字符串中某个字符的个数,使用方法是count(begin,end,‘a’)
其中begin指的是起始地址,end指的是结束地址,第三个参数指的是需要查找的字符。
count(ivec.begin() , ivec.end() , searchValue)
compare 333
string s1="abandon";
string s2="about";
int b=s1.compare(s2);//直接比较,s1小于s2,故返回-1
cout<<b<<endl;
int c=s1.compare(2,4,s2);//s1下标为2的字符a开始的4个字符ando和s2进行比较。ando大于s2故返回1
cout<<c<<endl;
int d=s1.compare(2,4,s2,1,3);
cout<<d<<endl;//s1下标为2的字符a开始的4个字符ando和s2下标为1的字符b开始的3个字符bou比较。前者小,故返回-1。
string s3="abc";
string s4="abc";
int e=s3.compare(s4);//相等返回0
contain 444 555打不开
人麻了明明cf上面有一个原题用过contain忘了😨🤯🤕🥺🤧
std::map<int, std::string> example = {{1, "One"}, {2, "Two"}, {3, "Three"}, {42, "Don\'t Panic!!!"}};
if(example.contains(42)) std::cout << "Found\n";
else std::cout << "Not found\n";
A
for (int i = 0; i < w.size(); ++i) if (w[i].compare(0, p.size(), p) == 0)a++;
for(auto i:w)if(i.substr(0,p.size())==p)res++;
for(auto i:w)if(i.find(p)==0)res++;
for(int i=0;i<w.size();i++) {
if (w[i].size()<p.size()) continue;
bool ok=1;
for(int j=0;j<p.size();j++) {
if (w[i][j]!=p[j]) {
ok=0;
}
}
ret+=ok;
}
B SBHUMAN SBSPIRIT
int now[26],now2[26];
for(int i=0;i<26;++i)now[i]=now2[i]=0;
for(auto &v:s)now[v-'a']++;
for(auto &v:t)now2[v-'a']++;
int ans=0;
for(int i=0;i<26;++i)ans+=max(now[i],now2[i])-min(now[i],now2[i]);
return ans;
int a[26];
public:
int minSteps(string s, string t) {
for(int i=0;i<s.size();i++) a[s[i]-'a']++;
for(int i=0;i<t.size();i++) a[t[i]-'a']--;
int ret=0;
for(int i=0;i<=25;i++) ret+=abs(a[i]);
return ret;
C
当时间增加时,所有公交车完成旅途的总数一定增加。
t具有二值性,可以通过二分查找确定使得该判定问题成立的最小的t
O(nlogmk) n=10^5 m=k=10^7
class Solution {
public:
long long minimumTime(vector<int>& t, int to) {
//sort(t.begin(),t.end());
long long a=0,b=1e14; //1LL*to*t[0] 但凡随便一辆车跑to趟都可都可以完成任务
while(a<b){
long long s=0;
long long mid=a+b>>1; //l+(r-l)/2 a+b>>1 (a+b)/2
for(auto x:t){
if(mid<x)break;
s+=mid/x;
}
if(s>=to)b=mid;
else a=mid+1;
//r=mid l=mid+1
//l=mid r=mid-1
}
return a; //l,r都可以
}
};
🧐🤧🤡不带sort也可以
还有这种int t = l % 2 + r % 2;
ll mid = l / 2 + r / 2 + t / 2;
class Solution {
public:
long long minimumTime(vector<int>& time, int totalTrips) {
long long low=0,high=1e14;
long long mid;
long long trip;
while(low<=high){
mid=(low+high)/2;
trip=0;
for(int i=0;i<time.size();++i){
trip+=mid/time[i];
}
if(trip>=totalTrips)
high=mid-1;
else
low=mid+1;
}
return low;
}
};
D
有待商榷 最近才看了完全背包 dp深似海 跪 寄