算法
HDdgut
这个作者很懒,什么都没留下…
展开
-
计数器(JS闭包)
在js中所有函数都可以访问上一层作用域,父函数中定义子函数,子函数可以访问父函数中的值,子函数相当于一个闭包函数。父函数调用子函数进行计数,n不会被重置,且不能被外部所改变,只有重新调用父函数,才会重置。调用父函数时,返回的是一个函数,相当于要执行createCounter()() 才会有输出值;实现一个计数器,counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值;闭包满足n的变量,调用过程中不会在外部被改变,也不会被重置。输出[-2,-1,0,1]原创 2023-10-10 20:00:00 · 541 阅读 · 0 评论 -
计算两个数之和不使用四则运算
3.进位,则两个数都是1的位置,左边需要进位1,(a&b) 两个位置都是1,相与后1,左移进1。4.得出公式a+b=a^b+(a&b)原创 2023-06-25 22:00:00 · 124 阅读 · 0 评论 -
什么是尾调用优化和尾递归?
尾调用是函数的最后一步,所以不需要,保留外层函数的调用记录,因为调用位置、内部变量的信息不会再用到,可以直接用内层函数的调用记录,取代外层函数的调用记录。函数调用会在内存中形成一个“调用记录”,又称为“调用帧”,保存调用位置和内部变量信息。当函数嵌套的层级比较深,调用栈中的调用帧比较多,对内存的消耗很大。解法:最后一步可以选择爬1个或2个台阶,则爬n阶等于爬(n-1)+(n-2)个台阶之和。每次的结果都保留在参数中,只保留一个调用记录,复杂度 O(1),不需要保留每一步的调用记录。原创 2022-11-09 20:00:00 · 430 阅读 · 0 评论 -
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。链接https//leetcode.cn/problems/single-number。你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?原理使用map记录每个元素出现的次数。3.异或运行中,满足交换律和结合律。输入[4,1,2,1,2]来源力扣(LeetCode)2.任何数和0做异或,等于本身。1.任何数和自己做异或等于0。输入[2,2,1]原理使用异或运算符。......原创 2022-07-20 20:00:00 · 1400 阅读 · 0 评论 -
多次买卖一支股票
题目:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格原创 2022-01-05 22:18:00 · 148 阅读 · 0 评论 -
leetcode 程序员的算法趣题 04切分木块
题目:假设要把长度为 n 厘米的木棒切分为 1 厘米长的小段,但是 1 根木棒只能由 1 人切分,当木棒被切分为 3 段后,可以同时由 3 个人分别切分木棒,求最多有 m 个人时,最少要切分几次。譬如 n = 8,m= 3 时如图所示,切分 4 次就可以了。解题思路:当 n = 20,m = 3 时的最少切分次数为 _8 ;当 n = 100, m = 5 时的最少切分次数为 _22 。当木棒数少于人数的时候,下一次切成的木棒等于现在已经切成的木棒数*2(等于m的累积和);木棒数大于或等于人数的时原创 2020-12-24 17:35:48 · 616 阅读 · 1 评论 -
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
/***@param{number[]}nums*@return{number[]}*/varsingleNumber=function(nums){varnum=0,mask=1,num1=0,num2=0,i=0;for(i=0;i<nums.length;i++){num^=nums[i];...原创 2019-12-03 20:39:08 · 712 阅读 · 0 评论 -
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(来源LeetCode)
异或的解法如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。与0异或,取决于X本身(a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;)varsingleNumber=function(nums){varnum=0;for(i=0;i<nums.length;i++){num^=num...原创 2019-12-03 19:35:14 · 573 阅读 · 0 评论 -
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-substring-wit...原创 2019-09-23 17:05:32 · 394 阅读 · 0 评论 -
两数相加(使用链表)
题目:给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-...原创 2019-09-11 11:44:33 · 153 阅读 · 0 评论