算法
wangjun0708
这个作者很懒,什么都没留下…
展开
-
剑指offer-不用加减乘除做加法-JavaScript
题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路位运算按位与&,按位或|, 按位异或^使用位运算实现加法:1、一位加法难点:如何解决进位问题?问题:没有采取进位操作导致运算错误在位运算中,我们用“<<”表示向左移动一位,也就是“进位”。那么我们就可以得到如下的表达式: ( x & y ) << 1拥有了两个基本表达式:执行加法x ^ y 进位操作( x &am...原创 2020-06-23 17:26:59 · 251 阅读 · 0 评论 -
剑指offer-变态跳台阶-JavaScript
题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法思路一 递归+数组参考普通跳台阶(每次可以跳1个或 2 个台阶)的思路:https://blog.csdn.net/weixin_42762089/article/details/86496014n个台阶爬楼的爬楼方法就等于 一开始爬1步的方法数 + 一开始爬2步...原创 2020-02-03 17:57:03 · 227 阅读 · 0 评论 -
剑指offer-重建二叉树-JavaScript
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路前序遍历:若二叉树为空,则空操作;否则:1.访问根节点;2.先序遍历左字树;3.先序遍历右子树;中序遍历:若二叉树为空,则空操作;否则:...原创 2020-02-03 14:55:24 · 217 阅读 · 0 评论 -
剑指offer-旋转数组的最小数字-JavaScript
题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路 本题的直观解法很简单,直接对数组进行一次遍历就可以找到最小值,时间复杂度为O(n),但是显然这...原创 2020-02-01 00:43:15 · 213 阅读 · 0 评论 -
LeetCode181-超过经理收入的员工
方法一 使用JOINSELECT a.NAME 'Employee'FROM Employee a JOIN Employee bON a.ManagerId = b.Id AND a.Salary > b.Salary;方法二 使用WHERE从两个表中select将获得这两个表的笛卡尔积。在这种情况下,输出将是4 * 4 =...原创 2019-03-22 11:26:46 · 97 阅读 · 0 评论 -
LeetCode283-移动零-Java
题目给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。思路方法一:从头开始遍历数组,遇到非零数字则将其放到lastNonZeroindex,然后lastNonZeroindex++...原创 2019-05-07 13:17:28 · 231 阅读 · 0 评论 -
LeetCode5-最长回文子串-Java-动态规划
题目给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路动态规划:首先初始化一字母和二字母的回文,然后找到所有三字母回文,并依此类推…为了改进暴力法,我们首先观察如何避免在验证...原创 2019-05-21 10:52:13 · 1669 阅读 · 0 评论 -
LeetCode6-Z字形变换-Java
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行...原创 2019-05-24 09:48:30 · 199 阅读 · 0 评论 -
LeetCode55-跳跃游戏-Java-贪心算法
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为...原创 2019-07-17 13:37:11 · 356 阅读 · 0 评论 -
剑指offer-替换空格-Java
题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路解法一:在当前字符串上进行替换。在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。 令 P1 指向字符串原来的...原创 2019-09-02 11:33:34 · 116 阅读 · 0 评论 -
LeetCode172-阶乘后的零-Python
题目给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。思路最直观的想法是直接把数字的阶乘算出来,但是这样稳稳的上溢。 比如5 的阶乘是120 后面有一个0. 为了统计处这样的...原创 2019-03-12 00:02:37 · 233 阅读 · 0 评论 -
LeetCode121-买卖股票的最佳时机-Python
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 ...原创 2019-02-20 23:10:59 · 102 阅读 · 0 评论 -
LeetCode155-最小栈-Python
题目设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack...原创 2019-02-23 14:15:17 · 328 阅读 · 0 评论 -
LeetCode101-对称二叉树-Python3
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3思路递归法,关键在于 return...原创 2019-01-24 00:26:50 · 205 阅读 · 0 评论 -
LeetCode88-合并两个有序数组-Python3
题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nu...原创 2019-01-19 00:25:43 · 263 阅读 · 0 评论 -
LeetCode70-爬楼梯-两种方法
题目假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶...原创 2019-01-15 17:25:56 · 619 阅读 · 0 评论 -
LeetCode100-相同的树-Python3
题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...原创 2019-01-22 11:28:32 · 167 阅读 · 0 评论 -
LeetCode108-将有序数组转换为二叉搜索树-Python3
题目示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5思路这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足 左<根<右 的特性的二叉树,如果将二叉搜索树按中序遍...原创 2019-02-01 17:41:13 · 240 阅读 · 0 评论 -
LeetCode110-平衡二叉树-Python3
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,...原创 2019-02-07 23:17:39 · 308 阅读 · 0 评论 -
LeetCode118-杨辉三角-Python
题目给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]思路当 numRows=0,1,2 三种特殊情况时,返回固定结果。当 numRows >...原创 2019-02-15 22:23:45 · 219 阅读 · 0 评论 -
LeetCode111-二叉树的最小深度-Python3
题目给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2. 思路采用递归实现递归有以下几种情况: 1.根节点为空...原创 2019-02-10 17:03:59 · 228 阅读 · 0 评论 -
LeetCode112-路径总和-Python
题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4...原创 2019-02-11 14:24:07 · 159 阅读 · 0 评论 -
LeetCode83-删除排序链表中的重复元素-Python3-两种方法
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3方法一,将无重复值的结点添加到一个新链表思路:原链表不变,新建一个链表,遍历原链表,将原链表第一个结点值赋值为flag,若当...原创 2019-01-17 10:49:24 · 1055 阅读 · 0 评论