【12.23】转行小白历险记-算法02

2023-12-24 06:13:18

不会算法的小白不是好小白,可恶还有什么可以难倒我这个美女的,不做花瓶第二天

一、螺旋矩阵

59. 螺旋矩阵 II - 力扣(LeetCode)

1.核心思路:确定循环的路线,左闭右开循环,思路简单,就是操作需要思考,需要注意的是如果是奇数的话,中间的数需要等于循环次数加1

var generateMatrix = function(n) {
    // 初始化变量
    let startX = startY = 0;   // 起始行和列
    let loop = Math.floor(n/2);   // 需要进行的螺旋圈数
    let mid = Math.floor(n/2);    // 矩阵中心点
    let offset = 1;    // 用于控制每一层螺旋的长度
    let count = 1;     // 用于填充矩阵的数字
    let res = new Array(n).fill(0).map(() => new Array(n).fill(0)); // 创建初始矩阵

    // 外层循环控制螺旋圈数
    while (loop--) {
        let row = startX, col = startY;

        // 上行从左到右填充(左闭右开)
        for (; col < n - offset; col++) {
            res[row][col] = count++;
        }
        // 右列从上到下填充(左闭右开)
        for (; row < n - offset; row++) {
            res[row][col] = count++;
        }
        // 下行从右到左填充(左闭右开)
        for (; col > startY; col--) {
            res[row][col] = count++;
        }
        // 左列从下到上填充(左闭右开)
        for (; row > startX; row--) {
            res[row][col] = count++;
        }

        // 为下一个螺旋圈更新起始位置
        startX++;
        startY++;

        // 更新offset,减少下一层螺旋的长度
        offset += 1;
    }
    // 如果n为奇数,单独设置中心点的值
    if (n % 2 === 1) {
        res[mid][mid] = count;
    }
    return res;
};

二、二分查找

题目69. x 的平方根 - 力扣(LeetCode)

可恶太可恶了,一看就会一用就废是吧,二分是吧

算术平方根科普,你们看到这里就知道看我这个博主的帖子真的是很小白了,我居然这东西都忘记了,高中老师对不起

我觉得理解这道题,要对算数平方根的特点要了解

1.哪些数的算数平方根是本身

2.对于任何大于 1 的整数 x,其平方根不会大于 x / 2

3.所以这里就会有一个区间

4,接着就是按照二分法的写法进行解析

我觉得还需要再看一遍

?三、移除元素

844. 比较含退格的字符串

心得

1.思路是对的

  • 先筛选字符串,找出筛选后的字符串
  • 再判断两个字符串是不是相等

2.没有写出来的原因

  • 我不知道怎么字符转数组(虽然不好意思写出来,但是还是要写出来)
  • 如果两个用到的方法是类似的,那么就可以考虑方法的复用
  • 但是我这个写法很笨
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
/**
也就是说如果字母后面存在一个#那么前面的字母就会被删除
我们得先判断一下这两个字符串没有#后的数组是什么样子
分别循环这两个字符串
 */
var backspaceCompare = function(s, t) {
    function processString(str) {
        let arr = str.split(''); // 将字符串转换为数组
        for (let i = 0; i < arr.length; ) {
            if (arr[i] === '#') {
                if (i > 0) {
                    arr.splice(i - 1, 2); // 删除 '#' 及其前一个字符
                    i--; // 由于删除了两个字符,索引减少
                } else {
                    arr.splice(i, 1); // 删除 '#' 字符
                }
            } else {
                i++; // 移动到下一个字符
            }
        }
        return arr.join(''); // 将数组转换回字符串
    }

    // 处理两个字符串
    s = processString(s);
    t = processString(t);

    return s === t; // 比较处理后的字符串
};

让我们看看好的小伙伴写的咋样

var backspaceCompare = function(s, t) {
  for(var i=0;i<s.length;i++){
        if(s[i]==='#'){
            if(i===0){
                s=s.slice(1)
                i--
            }else{
                s=s.slice(0,i-1)+s.slice(i+1)
                i-=2 
            }
            
        }
    }

    for(var i=0;i<t.length;i++){
        if(t[i]==='#'){
            if(i===0){
                t=t.slice(1)
                i--
            }else{
                t=t.slice(0,i-1)+t.slice(i+1)
                i-=2
            }
        }
    }
    return s===t
};

今天刷的算法题,有些还没有及时笔记,后续补?

?

文章来源:https://blog.csdn.net/TTTT2222111/article/details/135120950
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。