刷题笔记(第一天)

  1. 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]

javascript 复制代码
var twoSum = function(nums, target) {
    for(let i=0;i<nums.length;i++) {
        for(let j=1;j<nums.length;j++) {
            if (nums[i]+nums[j]===target) {
                return [i,j];
            }
        }
    }
    retrun [-1,-1];
}

2.(1)给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。

示例 1:

输入:

n = 10

"call","call","call"

输出:[10,11,12]

解释:

counter() = 10 // 第一次调用 counter(),返回 n。

counter() = 11 // 返回上次调用的值加 1。

counter() = 12 // 返回上次调用的值加 1。

javascript 复制代码
var createCounter = function(n) {
    return function() {
        return n++;
    };
};

(2)要理解闭包,然后使用:

闭包概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域

简单理解:闭包=内层函数+外层函数的变量

当一个函数定义在另一个函数内部,并且内部函数引用了外部函数作用域中的变量时,就会创建一个闭包。当内部函数从外部函数返回时,它会保留对外部函数作用域的引用,即使在外部函数执行完毕后,仍然可以继续访问这些变量。反之则不成立! 简单来说,闭包可以"记住"来自其外部函数作用域的值,并在以后使用它们,即使外部函数已经返回,而这些值通常已经超出范围。 什么时候使用闭包概念? 从定义中我们可以看到,它通常用于从外部父函数检索值,因此我们可以理解为闭包可以用来检索已经超出范围的"死"值。我们还可以理解它可以用于保护某些变量或函数。 因此,闭包对于创建私有变量和函数、实现部分函数应用以及在异步代码中保留状态非常有用。 每当在编写代码时遇到需要这类东西的情况时,都可以尝试引入闭包概念,即在程序员的语言中称为词法环境。

javascript 复制代码
const makeCounter = () => {
  let count = 0;
  
  return () => {
    count++;
    console.log(count);
  }
}

let counter = makeCounter();
counter(); // 输出 1
counter(); // 输出 2
counter(); // 输出 3

在上面这个例子中,makeCounter 是一个箭头函数,它返回另一个箭头函数。返回的函数每次被调用时都会增加 count 变量的值,并将新 count 值打印到控制台。 当调用 makeCounter 时,它创建了一个包含 count 变量的新作用域,并将其初始化为 0。然后它返回一个新的箭头函数,该函数"封闭"了这个作用域,并在每次调用时递增 count 变量。 当我们将返回的箭头函数分配给 counter 变量时,我们创建了一个闭包,它保留了对 count 变量的引用。 每次调用 counter() 时,它都会递增 count 变量并打印新值,因为它仍然"封闭"着外部函数作用域中的原始 count 变量。 因此,由于 count 变量没有暴露在返回对象的外部,它是一个实际上只能通过 makeCounter() 方法进行访问或修改的私有变量。

javascript 复制代码
function add(x) {
  return function(y) {
    return x + y;
  }
}

let add5 = add(5);
console.log(add5(3)); // 输出 8

在这个例子中,add() 函数返回了另一个接受单个参数的函数,该函数返回参数与外部函数作用域中的 x 值的总和。 这使我们能够通过传入 x 值并获取返回一个新函数来"部分应用" add() 函数。 这样我们就可以像使用任何其他函数一样使用新函数,根据需要传入不同的 y 值。

参考

作者:Allen_Xie

链接:https://leetcode.cn/problems/counter/

来源:力扣(LeetCode)

相关推荐
草履虫建模2 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq4 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq5 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
ASKED_20195 小时前
Langchain学习笔记一 -基础模块以及架构概览
笔记·学习·langchain
爱吃rabbit的mq5 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
Lois_Luo6 小时前
Obsidian + Picgo + Aliyun OSS 实现笔记图片自动上传图床
笔记·oss·图床
(❁´◡`❁)Jimmy(❁´◡`❁)6 小时前
Exgcd 学习笔记
笔记·学习·算法
傻小胖6 小时前
21.ETH-权益证明-北大肖臻老师客堂笔记
笔记·区块链
YYuCChi6 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱7 小时前
牛客网刷题(2)
java·开发语言·算法