algorithm
这是我对于算法的学习,主要是leetcode部分
这是你的路啊
自强不息 追求卓越
展开
-
二分查找你真的懂?
二分查找简直是简单的不能再简单的一个算法了, 很多人入门时几乎都是踩着二分查找的尸体入门的,那么这个算法你除了会用,思考过里边的一些细节吗?比如这个为什么这样设计? 那个为什么那样设计?接下来我就带你重新认识一下这个既熟悉又陌生的二分查找。 二分查找的大体思路,就是将一个有范围限定的数****比较次数降低,不再像冒泡排序那样一个一个的比较,这个降低的比较次数是非常的大的,可以大大提升我们程序的效率。好了,这些估计你们都懂。先看一个运用二分法的程序:很明显这是一个求完全平方数的一个程序。func原创 2020-06-30 10:16:57 · 358 阅读 · 0 评论 -
LeetCode1446. 连续字符
文章目录1、问题2、思路3、代码4、感悟1、问题给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。示例 1:输入:s = “leetcode”输出:2解释:子字符串 “ee” 长度为 2 ,只包含字符 ‘e’ 。示例 2:输入:s = “abbcccddddeeeeedcba”输出:5解释:子字符串 “eeeee” 长度为 5 ,只包含字符 ‘e’ 。示例 3:输入:s = “triplepillooooow”输出:5示原创 2020-06-28 10:37:13 · 367 阅读 · 0 评论 -
LeetCode202 快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282 + 22 ...原创 2020-04-15 18:04:44 · 151 阅读 · 0 评论 -
leetcode67.二进制求和 add-binary
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”func addBinary(a string, b string) string { var s string temp := 0...原创 2020-04-06 19:09:47 · 159 阅读 · 0 评论 -
2020shopee春招第一次的在线编程题及AC解答
时间2020年2月15日14:00~16:00Let the code speak!第一题版本号比较大小@return 0代表相等,1代表左边大,-1代表右边大输入两个版本号,中间逗号隔开,比较大小。package algorithm.test;import java.util.Scanner;public class Main { public static void ...原创 2020-02-15 16:26:15 · 1667 阅读 · 0 评论 -
LeetCode239. 滑动窗口最大值
题目描述:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1...原创 2020-01-15 11:56:41 · 258 阅读 · 2 评论 -
最大公约数和最小公倍数
首先说明一下:最少公倍数是根据最大公约数推出来。所以咱们先来看看最大公约数怎么求的?最大公约数我们要考虑这种情况,48 和 24 这种情况,48是24的二倍,我们仔细观察的话会发现,如果不是这种特殊情况,其它的情况就是,两个数最大的公约数也不会超过那个最小数的一半,所以我们锁定范围来遍历就行了,ok,找到就行了 最大公约数:import java.util.Scanner;/** ...原创 2018-09-09 18:01:49 · 265 阅读 · 0 评论 -
反转链表
关于这个经典的题目,我看网上的解释,看的脑壳疼,于是就去看视频,看的也是脑壳疼,看一圈,发现还是不懂,于是去翻翻评论,发现好多人和我一样还是看完一脸懵逼,可能是我太菜了,但是为了拯救大众,也为了一探究竟,我还是经过千辛万苦,找到写的好的题解了,在这里分享出来,给那些像我一样迫切渴望求知的人解解惑!由于以下内容极易通过注释理解,我就不多说了,也不上图了。第一种:当然是迭代啦。public st...原创 2019-12-26 17:29:25 · 115 阅读 · 2 评论 -
删除倒数第n个节点
新瓶装旧酒,你品,你细品,你再细品,你仔细的品。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { p...原创 2019-12-02 16:56:23 · 110 阅读 · 1 评论 -
字符串排序
Talk is cheap, show me the code.一、问题描述编写一个程序,将输入字符串中的字符按如下规则排序。规则1:英文字母从A到Z排列,不区分大小写。如,输入:Type 输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。如,输入:BabA 输出:aABb规则3:非英文字母的其它字符保持原来的位置。如,输入:By?e 输出:Be?y样例:...原创 2019-11-21 20:58:08 · 674 阅读 · 2 评论 -
LeetCode 448. 找到所有数组中消失的数字
算法描述:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]题解:这道题,...原创 2019-10-28 09:51:25 · 179 阅读 · 0 评论 -
LeetCode4. 寻找两个有序数组的中位数
题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (...原创 2019-10-26 21:37:21 · 179 阅读 · 0 评论 -
LeetCode20. 有效的括号
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:...原创 2019-08-19 22:48:21 · 134 阅读 · 0 评论 -
LeetCode53. 最大子序和
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路: 首先对于一个数来说我们要考虑要不要把它归入到最大连续和的子序列中,这其中的判断依据是什么?难道只是一个数是否小于0?不,不然,对于最...原创 2019-08-19 22:26:15 · 134 阅读 · 0 评论 -
Leetcode:38报数
一、题目描述:报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二”...原创 2019-08-06 09:51:06 · 171 阅读 · 0 评论 -
个人对于冒泡排序和选择排序的理解
1.冒泡排序:它的实现原理节省了时间,实现原理:一组数两两进行比较,然后把最大数放在后边,这样每次循环结束都会少一次比较,/** 冒泡排序*/public class C { public static void main(String[] args) { int[] arr = { 6, 3, 8, 2, 9, 1 }; for (int i = 0;...原创 2017-10-25 11:19:22 · 2624 阅读 · 0 评论 -
两个串最长公共子序列的长度:
public class Main { //求两个串最长公共子序列的长度 //abcdef abc abd bdf public static int f(String s1,String s2){ if(s1.length()==0||s2.length()==0){ return 0; } ...原创 2017-11-21 22:29:53 · 271 阅读 · 0 评论 -
[LeetCode] House Robber 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃...原创 2018-07-29 10:02:50 · 270 阅读 · 0 评论 -
LeetCode 746. 使用最小花费爬楼梯
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从c...原创 2018-07-29 11:08:17 · 578 阅读 · 0 评论 -
Fibonacci数列---兔子问题
Fibonacci数列1、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?我不知道这个问题问的是什么?到底是兔子总对数还是兔子的总人头数?请回答我,蟹蟹。按总对数算的话。public class 兔子问题 { public static void main(String[] args...原创 2018-10-28 10:12:44 · 731 阅读 · 0 评论 -
LeetCode 292 Nim Game(Nim游戏)
你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4 输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是...原创 2018-09-11 10:19:05 · 251 阅读 · 0 评论 -
LeetCode 反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转。示例 1:输入: 123 输出: 321 示例 2:输入: -123 输出: -321 示例 3:输入: 120 输出: 21 注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。 int ret = 0; ...原创 2018-09-01 22:20:57 · 151 阅读 · 0 评论 -
LeetCode 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。示例 1:输入: “abcabcbb” 输出: 3 解释: 无重复字符的最长子串是 “abc”,其长度为 3。 示例 2:输入: “bbbbb” 输出: 1 解释: 无重复字符的最长子串是 “b”,其长度为 1。 示例 3:输入: “pwwkew” 输出: 3 解释: 无重复字符的最长子串是 “wke”,其长度为...原创 2018-08-26 11:21:13 · 149 阅读 · 0 评论 -
LeetCode 罗马数字转整数
一. 罗马数字转整数 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 ...原创 2018-08-25 20:30:19 · 561 阅读 · 0 评论 -
LeetCode 二叉树的中序遍历
94.二叉树的中序遍历 数据结构我是学过的,但是我用Java代码还没实现过,于是在做这个题时我看了一个先序遍历的例子,下边总结一下 中序遍历规则是:先遍历左子树,然后遍历中子树,最后遍历右子树。 先序遍历的规则是:先遍历中子树,然后是左子树,最后是右子树。 后序遍历的规则是:先遍历左子树,然后是右子树,最后是中子树。 这里有个记忆的小技巧:就是无论是中序,先序,后序,都是左子树在右子树的...原创 2018-08-25 20:20:58 · 906 阅读 · 0 评论 -
LeetCode 加一
66.加1 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2:输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表...原创 2018-08-25 20:03:29 · 540 阅读 · 0 评论 -
LeetCode 784. 字母大小写全排列
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = "a1b2"输出: ["a1b2", "a1B2", "A1b2", "A1B2"]输入: S = "3z4"输出: ["3z4", "3Z4"]输入: S = "12345"原创 2018-08-05 14:48:54 · 898 阅读 · 0 评论 -
LeetCode 46. 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]说起回溯算法,渊源颇深,我上次做过一道,本应该这次能拿下但是,又没拿下,不过这次有点理解它的思想了,每次的回溯就是一个二叉树,简单的说,就是你执行的操作需要...原创 2018-08-05 14:47:00 · 542 阅读 · 0 评论 -
LeetCode 53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。这道题本来是能做出来的,但是还是遗憾收场,我分析了之所以这样...原创 2018-08-05 11:50:33 · 650 阅读 · 0 评论 -
[LeetCode] House Robber 打家劫舍||
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释:...原创 2018-07-31 22:18:12 · 214 阅读 · 0 评论 -
LeetCode——电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上原创 2018-07-29 11:48:51 · 424 阅读 · 0 评论 -
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...原创 2018-11-18 15:02:17 · 181 阅读 · 0 评论