5468. 第 k 个缺失的正整数
- 严格升序排列 的正整数数组 arr 和整数 k
- 这个简单啊,我就直接从1开始搜索啊
class Solution {
public:
int search(vector<int>& arr,int target)
{
int start=0;
int end=arr.size()-1;
while(start<=end)
{
int mid=(start+end)/2;
if(arr[mid]==target)
return mid;
if(arr[mid]<target)
start=mid+1;
if(arr[mid]>target)
end=mid-1;
}
return -1;
}
int findKthPositive(vector<int>& arr, int k) {
int num=0;
int target=1;
while(num!=k)
{
if(search(arr,target)==-1)
{
num++;
target++;
}
else
{
target++;
}
}
return target-1;
}
};
- 明显更简单的方法是算gap
- 遍历数组元素算gap
- 直到大于k
5469. K 次操作转变字符串
- 两字符串 s 和 t ,
- k 次操作以内把字符串 s 转变成 t 。
- 第 i 次操作时(1 <= i <= k),可如下
- 选s 中且之前未被选过的任意下标 j (下标从 1 ),
- 并将此位置的字符切换 i 次。
- 不进行任何操作。
- 不就1个1个比较吗
class Solution {
public:
int shiftNumber(char a,char b)
{
if(b>=a)
{
return b-a;
}
else
{
return 26-(a-b);
}
}
bool canConvertString(string s, string t, int k) {
if(s.size()==0 || s.size()!=t.size())
return false;
int *start=new int[26];//26个数
for (int i=0;i<26;i++)
start[i]=i;
for (int i=0;i<s.size();i++)//对s和t遍历
{
int movenumber = shiftNumber(s[i],t[i]);
if(movenumber==0)
continue;
start[movenumber]+=26;
movenumber=start[movenumber]-26;
if(movenumber>k)
return false;
}
return true;
}
};