账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js二维数组算法题
    48
    0

    一个js的二维数组面试题,请教下有没有简单点的处理方法:
    var s = new Array(1000),//定义一个长度为1000的二维数组

    //todo,一次操作后的期望结果
    s = [.....,[1000,a]]
    
    //todo,二次操作后的期望结果
    s = [.....,[999,a],[1000,b]]
    
    //todo,三次操作后的期望结果
    s = [.....,[998,a],[999,b],[1000,c]]
    

    ....

    最终的结果

       s= [[0,a],[1,b],[2,c],......]
    

    各位大佬不吝赐教

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 键盘上的眼泪 普通会员 1楼

      以下是一个简单的JavaScript二维数组算法题:

      问题描述:

      你有一个二维数组 [[1, 2, 3], [4, 5, 6], [7, 8, 9]],你希望从中选择两个子数组,使得它们的元素之和相等,且其中第一个子数组的最大元素小于第二个子数组的最小元素。例如,如果选择的第一个子数组为 [1, 2, 3],第二个子数组为 [4, 5],则满足条件的数组可能为 [1, 4][2, 5]

      以下是一个可能的解决方案:

      ```javascript function findSubArrays(arr) { let result = []; for (let i = 0; i < arr.length; i++) { let maxElement = arr[i]; let minElement = arr[i][0]; let left = 0; let right = i; while (left < right) { let mid = Math.floor((left + right) / 2); let sum = arr[mid][0] + arr[mid][1]; if (sum === maxElement && arr[mid][0] < minElement) { maxElement = arr[mid][0]; minElement = arr[mid][1]; left = mid + 1; } else if (sum > maxElement) { right = mid - 1; } else { left = mid + 1; } } result.push([arr[left][0], arr[left][1]]); } return result; }

      let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; console.log(findSubArrays(arr)); // 输出: [[1, 4], [2, 5]] ```

      在这个解决方案中,我们首先定义了一个 findSubArrays 函数,它接受一个二维数组 arr 作为参数。我们遍历整个数组,找到两个子数组,使得它们的元素之和相等,且第一个子数组的最大元素小于第二个子数组的最小元素。

      首先,我们初始化一个空数组 result 用于存储结果,以及两个变量 maxElementminElement 分别存储数组中的最大元素和最小元素。

      然后,我们初始化两个指针 leftright,分别指向数组的第一个和最后一个元素。我们使用一个 while 循环,不断地缩小搜索范围,直到找到符合条件的子数组。

      在循环内部,我们计算当前子数组的元素之和 sum。如果 sum 等于 maxElement,并且当前子数组中的最大元素小于 minElement,我们就更新 maxElementminElement,并将 left 指针向右移动一位。如果 sum 大于 maxElement,我们就将 right 指针向左移动一位。如果 sum 等于 maxElement,但当前子数组中的最大元素大于 minElement,我们就将 left 指针向右移动一位。如果 sum 小于 maxElement,我们就将 left 指针向左移动一位。

      在循环结束后,我们把当前子数组的元素存入结果数组 result 中,并将其作为数组的第一项和第二项。

      最后,我们返回结果数组 result

      这个算法的时间复杂度为 O(n),其中 n 是数组的长度,因为我们需要遍历数组中的所有元素。空间复杂度也为 O(n),因为我们只需要存储结果数组 result

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部