剑指Offer题目答案收集
发布日期:2021-05-14 14:38:52 浏览次数:18 分类:精选文章

本文共 2675 字,大约阅读时间需要 8 分钟。

为了解决二维数组查找和字符串空格替换的问题,我们可以分别采用不同的方法来实现。

二维数组查找

我们需要找到二维数组中是否存在某个整数。由于二维数组中每一行从左到右递增,每一列从上到下递增,因此可以采用从下到上、从左到右的方式进行查找,以减少比较的次数。

步骤如下

  • 从最后一行开始遍历,逐行向上。
  • 每一行中,从左向右遍历。
  • 比较当前元素与目标数:
    • 如果等于,返回True。
    • 如果大于,继续检查下一列。
    • 如果小于,继续检查下一行。
  • 如果遍历完整个数组仍未找到,返回False。
  • 字符串空格替换

    我们需要将字符串中的所有空格替换为"%20"。可以通过遍历每个字符来实现,并在遇到空格时进行替换。

    步骤如下

  • 初始化一个计数器记录空格的数量。
  • 遍历字符串中的每个字符。
  • 当遇到空格时,将其替换为"%20",并调整后续字符的位置。
  • 替换后,扩展字符串的长度以避免索引越界。
  • 确保替换过程正确处理索引位置,确保字符串完整性。
  • 代码实现

    Python版

    二维数组查找

    def Find(target, array):
    rows = len(array)
    if rows == 0:
    return False
    cols = len(array[0])
    i = rows - 1
    j = 0
    while i >= 0 and j <= cols:
    if array[i][j] == target:
    return True
    elif array[i][j] > target:
    j += 1
    else:
    i -= 1
    return False

    字符串空格替换

    def replaceSpace(str):
    if not str:
    return str
    new_str = []
    count = 0
    for char in str:
    if char == ' ':
    new_str.append("%20")
    count += 1
    else:
    new_str.append(char)
    # 计算替换后的长度
    new_length = len(new_str)
    # 需要将结果拼接成一个字符串
    result = ''.join(new_str)
    # 保留原长度不对的情况下,可能需要调整,但通常直接拼接即可
    return result

    C++版

    二维数组查找

    #include 
    using namespace std;
    bool Find(int target, vector
    > array) {
    int rows = array.size();
    if (rows == 0) return false;
    int cols = array[0].size();
    int i = rows - 1;
    int j = 0;
    while (i >= 0 && j <= cols) {
    if (array[i][j] == target) return true;
    if (array[i][j] > target) {
    j++;
    } else {
    i--;
    }
    }
    return false;
    }

    字符串空格替换

    #include 
    using namespace std;
    void replaceSpace(char *str, int length) {
    int count = 0;
    for (int i = 0; i < length; i++) {
    if (str[i] == ' ') {
    count++;
    }
    }
    int indexOld = length - 1; // 替换前的索引
    int newLength = length + 2 * count;
    // 可能需要向上扩展至newLength
    // 创建一个足够大的新字符串
    vector
    newStr(newLength);
    // 填充字符
    for (int i = 0; i < length; i++) {
    newStr[i] = str[i];
    }
    for (int i = 0; i < count; i++) {
    int pos = indexOld - (i * 2);
    if (pos < 0) {
    // 不应该出现这种情况,因为i从0开始,当pos是0时,i最多是count-1时也会P=2*i >=0
    break;
    }
    newStr[pos] = '%';
    newStr[pos+1] = '2';
    newStr[pos+2] = '0';
    }
    // 将newStr转换为字符串
    string result(newStr.begin(), newStr.end());
    // 根据原函数目的,返回新的字符串并替换空格
    // 由于原str可能被销毁,我们需要将结果独立返回
    string temporary(result);
    // 如果需要,返回原长度的字符串,可能不需要,但假设长度可以扩展
    return temporary;
    }

    总结

    以上代码实现了二维数组查找和字符串空格替换的问题。通过分别遍历数组按行和列进行查找,或逐字符替换空格,确保在较少比较次数下解决问题,并考虑了字符串长度的扩展以避免索引错误。

    上一篇:知识体系结构(副)
    下一篇:他人招聘面试经验

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月09日 21时56分32秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章