刷题笔记(第一天)

  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)

相关推荐
bbppooi6 分钟前
堆的实现(完全注释版本)
c语言·数据结构·算法·排序算法
FFDUST13 分钟前
C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)
c语言·c++·算法·leetcode
wwddgod27 分钟前
openharmony napi调试笔记
笔记
m0_7380545629 分钟前
【leetcode】全排列 回溯法
c++·算法·leetcode·回溯法
宇寒风暖30 分钟前
软件工程——UML简介
笔记·学习·软件工程
ZZZ_O^O40 分钟前
【贪心算法第五弹——300.最长递增子序列】
c++·学习·算法·leetcode·贪心算法
呼啦啦啦啦啦啦啦啦44 分钟前
刷题日常(移动零,盛最多水的容器,三数之和,无重复字符的最长子串)
算法·双指针·滑动窗口
Koishi_TvT1 小时前
蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)
c语言·c++·算法·性能优化·蓝桥杯·动态规划·c
孤独且没人爱的纸鹤1 小时前
C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例
c语言·数据结构·c++·算法
@曲终1 小时前
C语言学习 12(指针学习1)
c语言·经验分享·笔记·学习