算法
nzhj
这个作者很懒,什么都没留下…
展开
-
查找字符串中第一个唯一的字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。通过hash 和map/** * @param {string} s * @return {number} */var firstUniqChar = function(s) { let map = new Map(); let hash = {}; //记录字符串 for(let i =0; i<s.length;i++){ if(!hash[s[i]]){原创 2020-12-23 10:32:14 · 531 阅读 · 0 评论 -
最小爬楼梯
数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出原创 2020-12-21 15:15:16 · 143 阅读 · 0 评论 -
数组中重复的数字 for和for of的效率比较
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解通过解题 for of 的效率没有for 的效率高/** * @p原创 2020-12-17 14:45:32 · 302 阅读 · 0 评论 -
2020-12-04 最长无重复子串长度
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。遍历数组,将不重复的数组通过map 记录数值和下标,当重复时候,比较max(最长无重复长度)与map 的长度,取最大值,将index 重新定位到出现重复数字的下一位/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param arr int整型一维数组 the array * @return int整型 */export function maxLength原创 2020-12-04 17:14:24 · 333 阅读 · 0 评论 -
2020-12-02 数组原地去重
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。通过双指针操作,将不重复的数组移动到前面/** * @par原创 2020-12-02 09:43:47 · 1158 阅读 · 0 评论 -
2020-12-1 二分查找
请实现有重复数字的有序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。注意: 短路public class Solution { /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 查找值 * @param a int整型一维数组 有序数组 * @return int整型 */ public int upper_bound_原创 2020-12-01 09:06:19 · 123 阅读 · 0 评论 -
二进制实现加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。通过二进制解决一般加减法通过异或^解决但是进位未出现问题通过& 情况判断是否进位,1&1 = 1 所以想左移动一位public class Solution { public int Add(int num1,int num2) { int result = 0; int result1= 0; do { result =原创 2020-11-30 09:31:18 · 327 阅读 · 0 评论 -
2020-11-17判断链表是否有环
题目描述判断给定的链表中是否有环如果有环,则跑的快的指针一定等追上跑的慢的指针,就是跑一圈之后追赶上慢的public class Solution { public boolean hasCycle(ListNode head) { if(head == null){ return false; } ListNode fast = head; ListNode slow = head;原创 2020-11-17 15:34:45 · 81 阅读 · 0 评论 -
2020-11-17反转链表
输入一个链表,反转链表后,输出新链表的表头。public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre = null; ListNode p = null; while(head!=null){ p = head.next; head.next = pre; pre = hea原创 2020-11-17 15:22:36 · 53 阅读 · 0 评论 -
2020-11-04二叉树深度
二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。题解1、递归深度遍历根节点若为空节点高度为0,非空遍历左节点和有节点,查看左右节点的高度,取最大值+1 则为该节点深度class Solution { public int maxDepth(TreeNode root) { if (root == null){ return 0; }原创 2020-11-04 10:16:45 · 75 阅读 · 0 评论 -
2020-10-30调整数组奇数偶数位置
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class Solution { public void reOrderArray(int [] array) { boolean flag = true; for (int i = 0; i < array.length; i++) { for原创 2020-10-30 09:26:53 · 165 阅读 · 0 评论 -
2020-10-28 数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为01、直接调用Math方法 public double Power(double base, int exponent){ return Math.pow(base,exponent); }2、暴力解法,直接进行循环求解 public double Power(double base, int exponent){原创 2020-10-28 17:58:33 · 123 阅读 · 0 评论 -
2020-10-27 二进制数输出1个数
题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。输入:00000000000000000000000000001011输出:3题解: 采用n&(n-1) (n-1) 去掉了二进制最右边的数值,然后and操作,若不为0 则还含有1,继续直至为0public class Solution { public int NumberOf1(int n) { int count = 0; while (n!=0){原创 2020-10-27 09:41:27 · 121 阅读 · 0 评论 -
2020-10-27 递归 矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法题解:f[n] = f[n-1] + f[n-2],初始条件f[1] = 1, f[2] =2public class Solution { public int RectCover(int target) { if (target ==1 ||target == 2){ return原创 2020-10-27 09:27:04 · 84 阅读 · 0 评论 -
2020-10-26 斐波那契数列
斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.0 <= n <= 100当数值较大时候会大数溢出,所以要对答案进行取模,而且使用递归的方法内存占用大,运行时间长,容易造成时间超时,所以采用动态规划的方法题解:Java:class Solution { public int fib(int n原创 2020-10-26 09:36:59 · 531 阅读 · 0 评论 -
栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。1、Javascript解法var stack1=[];var stack2 = [];function push(node){ // write code here stack1.push(node); }function pop(){ // write code here if (stack2.length===0){ while(stack原创 2020-10-22 10:49:17 · 128 阅读 · 0 评论 -
剑指Offer 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。1、Java(1)先序遍历:根节点→左子树→右子树。中序遍历:左子树→根节点→右子树。后续遍历:左子树→右子树→根节点。先序遍历先根便利开始,所以第一个为根节点,然后将中序便利分割成左节点集合和右节点集合,然后通过递归创建二叉树。/** * Defin原创 2020-10-21 11:02:02 · 190 阅读 · 0 评论 -
剑指Offer解题 链表反序
剑指Offer题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList**题解:**1、javascript反序输出,就相当于先进后出,所以构建栈,将链表结构存入数组中,然后利用Javascipt中的API反序。/*function ListNode(x){ this.val = x; this.next = null;}*/function printListFromTailToHead(head){ // write code here va原创 2020-10-20 09:50:43 · 86 阅读 · 0 评论