头像

ylc0710


访客:194

离线:17分钟前



ylc0710
1天前
#include <iostream>
#include <cstdio>

using namespace std;

const int N = 10010,M=100010;
int n,m;
int ne[N];
char s[M],p[N];

int main()
{
    cin >> n >> p + 1 >> m >> s + 1;

    for(int i=2, j=0; i<=n; i++)
    {
        while(j && p[i] != p[j+1]) j = ne[j];
        if(p[i] == p[j+1]) j++;
        ne[i] = j;
    }

    for(int i=1,j=0; i<=m; i++)
    {
        while(j && s[i] != p[j+1]) j=ne[j];
        if(s[i] == p[j+1]) j++;
        if(j == n)
        {
            printf("%d ", i - n);
            j = ne[j];
        }
    }
    return 0;
}

代码提交状态: Segmentation Fault
不知道哪里错了。。。



活动打卡代码 AcWing 762. 字符串匹配

ylc0710
1天前
#include <iostream>
#include <string>
using namespace std;
int main()
{
    double k;
    string a,b;
    cin >> k >> a >> b;
    //getline(cin,a); 为什么用这种读入字符串数据的方式不可以?
    //getline(cin,b);
    int sum = 0;
    double count = a.size();
    for(int i=0;i<count; i++)
    {
        if(a[i] == b[i]) sum++;
    }
    if(sum/count >= k) cout << "yes" << endl;
    else cout << "no" << endl;
    return 0;
}



ylc0710
1天前
#include <iostream>
#include <string>
using namespace std;
int main()
{
    double k;
    string a,b;
    cin >> k >> a >> b;
    //getline(cin,a); 为什么用这种读入字符串数据的方式不可以?
    //getline(cin,b);
    int sum = 0;
    double count = a.size();
    for(int i=0;i<count; i++)
    {
        if(a[i] == b[i]) sum++;
    }
    if(sum/count >= k) cout << "yes" << endl;
    else cout << "no" << endl;
    return 0;
}



ylc0710
2天前
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> printListReversingly(ListNode* head) {
        vector<int> res;
        while(head)
        {
            res.push_back(head->val);
            head = head->next;
        }
        return vector<int>(res.rbegin(), res.rend());//rbegin()\rend()是将数组进行翻转
    }
};



ylc0710
2天前

题目描述

blablabla

样例

blablabla

算法1

(双指针)

这种方法也是剑指offer书上给出的解题方法
blablabla

时间复杂度

O(n)

C++ 代码

class Solution {
public:
    string replaceSpaces(string &str) {
        //面试官在出题的时候重点考察的是算法的时间复杂度和空间复杂度,所以高效是个很好的标准
        //所以第一种方法开辟内存空间面试官会不满意,第二种方法是双指针
        int len = 0;
        for(auto x : str)
        {
            if( x == ' ') len += 3;
            else len++;
        }
        int i = str.size()-1, j = len - 1;
        str.resize(len);
        while(i >= 0)
        {
            if(str[i] == ' ')
            {
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
            }else
            {
                str[j--] = str[i];
            }
            i--;
        }
        return str;
    }
};


活动打卡代码 AcWing 16. 替换空格

ylc0710
2天前
class Solution {
public:
    string replaceSpaces(string &str) {
        string res;
        for(auto x: str)
            if(x == ' ')
                res += "%20";
            else 
                res += x;
        return res;
    }
};


活动打卡代码 AcWing 760. 字符串长度

ylc0710
2天前

```字符串长度:size(),strlen(),自己求https://www.runoob.com/cprogramming/c-function-fgets.html C 库函数 - fgets()用法

include [HTML_REMOVED]//用的是C的函数,注意头文件,没有用到C++的库

int main()
{
char str[101];

fgets(str, 101, stdin);//fgets()函数会读入回车,所以下面会判断

int len = 0;
for(int i = 0; str[i] && str[i] != '\n'; i++) len++;

printf("%d", len);
return 0;

}
```




ylc0710
3天前
class Solution {
public:
    bool searchArray(vector<vector<int>> array, int target) {
        if(array.empty() || array[0].empty()) return false;
        int i = 0, j = array[0].size()-1;//size()之后记得减1,数组下标从0开始
        while(i < array.size() && j >= 0) //也注意上述问题
        {
            if(array[i][j] == target) return true;
            if(array[i][j] > target) j--; //目标值比数组中数大,就向下,即j--,否则i++
            else i++;                     //因为数值的直角坐标系远点在左上角,i行数在左,j列数在右
        }
        return false;
    }
};



ylc0710
3天前
class Solution {
public:
    int duplicateInArray(vector<int>& nums) {
        int l =1, r = nums.size()-1;
        while(l < r)
        {
            int mid = l + r >> 1;//[l, mid] [mid+1, r]
            int s = 0;
            for(auto x: nums) 
            {
                if(x >= l && x <= mid) s++;
            }
            if(s > mid - l + 1 ) r = mid; //如果个数大于区间长度,则表示多余的苹果存在这个区间
            else l = mid + 1;
        }
        return r;
    }
};



ylc0710
3天前
class Solution {
public:
    int duplicateInArray(vector<int>& nums) {
        int n = nums.size();
        for(auto x: nums)
        {
            if(x < 0 || x >= n)
                return -1;
        }
        for(int i=0; i< n; i++)
        {
            while(nums[nums[i]] != nums[i]) swap(nums[nums[i]], nums[i]);
            if(nums[i] != i) return nums[i];
        }
    }
};