算法
Kyrie2011
这个作者很懒,什么都没留下…
展开
-
数组中的重复数字
找出数组中重复的数字。“在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。”数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000import java.util.*;...原创 2020-02-27 00:22:29 · 101 阅读 · 0 评论 -
动态规划—— LeetCode62 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向...原创 2019-06-04 11:10:27 · 132 阅读 · 0 评论 -
LeetCode 19 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?/** * Definition for singly-linked lis...原创 2019-06-15 14:24:41 · 69 阅读 · 0 评论 -
动态规划——LeetCode爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 ...原创 2019-06-03 22:41:47 · 100 阅读 · 0 评论 -
动态规划——LeetCode最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。/*class Solution { public int minPathSum(int[][] ...原创 2019-06-03 21:40:22 · 115 阅读 · 0 评论 -
LeetCode 80——删除排序数组中的重复项 II
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的...原创 2019-06-19 16:46:53 · 105 阅读 · 0 评论 -
LeetCode 26——删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 n...原创 2019-06-19 15:32:09 · 122 阅读 · 0 评论 -
动态规划问题
package test.com;public class Hui07_Dynamic { /* 求解金矿问题 动态规划--最优化 贪心算法--prim算法 */ //递归版本 public static int cal(int[] p, int len){ if(len == 0){ ...原创 2019-06-03 14:20:02 · 93 阅读 · 0 评论 -
二分查找及其变种小结
//注意边界条件//二分查找的基本原型//二分查找的变种及改进//二分查找最接近目标数(貌似没成功)原创 2019-06-08 22:56:25 · 154 阅读 · 0 评论 -
LeetCode16——最接近的3数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).class Solution { p...原创 2019-06-03 00:56:04 · 134 阅读 · 0 评论 -
LeetCode05—— 最长回文子串(中心扩展法)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”class Solution { public String longestPalindrome(String s) { ...原创 2019-06-02 20:22:59 · 816 阅读 · 0 评论 -
LeetCode14 —— 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。class Solution { public String longestCommo...原创 2019-05-29 22:13:16 · 82 阅读 · 0 评论 -
LeetCode13——罗马数字转整数
class Solution { public int romanToInt(String s) { HashMap<String, Integer> hm = new HashMap<>(); hm.put("M", 1000); hm.put("CM", 900); hm.put(...原创 2019-05-29 21:02:14 · 99 阅读 · 0 评论 -
动态规划——LeetCode63 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0...原创 2019-06-04 17:15:06 · 92 阅读 · 0 评论 -
LeetCode20 有效的括号
class Solution { public boolean isValid(String s) { Map<String, Integer> map = new HashMap<>(); map.put("(", 1); map.put(")", -1); map.put("{", 2); ...原创 2019-06-16 17:35:47 · 89 阅读 · 0 评论 -
股神
经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天…依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?import java.util.Scanner;/** * @program: Aglorithm * @Date: today * @A...原创 2019-08-10 22:06:55 · 132 阅读 · 0 评论 -
LeetCode46. 全排列——回溯
//计算全排列 public static void backtrack(int n, ArrayList<Integer> nums, List<List<Integer>> output, int first) { // if all integers are used up if (first == n) ...原创 2019-08-14 00:23:10 · 86 阅读 · 0 评论 -
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], ...原创 2019-07-12 10:25:41 · 187 阅读 · 0 评论 -
LeetCode 17—— 回溯
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。class Solution { ...原创 2019-07-14 19:18:14 · 144 阅读 · 0 评论 -
LeetCode 33——搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], ta...原创 2019-06-22 16:28:21 · 90 阅读 · 1 评论 -
LeetCode 24——两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.//相邻的节点位置交换 1-> 2 -> 3 -> 4 => 2 -> 1 -> 4 -> 3;publi...原创 2019-06-18 11:40:54 · 148 阅读 · 0 评论 -
分发糖果
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:...原创 2019-06-11 17:19:57 · 315 阅读 · 0 评论 -
只出现一次的数字——位运算
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4class Solution { public int singleNumber(...原创 2019-06-11 15:37:19 · 112 阅读 · 0 评论 -
面试中的怎么体现出算法
很多前端都觉得算法是特别高大上的东西,但其实和人工智能这种硬核(虽然调参也不怎么硬核)的东西不同,算法可能会复杂,也可能很容易理解。比如这道题就是一个非常经典的题目,很多公司的面试都会聊这道题。这道 medium 难度的问题,很适合展示一个有着丰富生活经验的程序员,如何在不需要算法基础的情况下,凭借人类的聪明才智,找到解决方案。热身首先,先找一下它的简化版 2sum 来热热身。最...转载 2019-06-11 15:23:31 · 309 阅读 · 0 评论 -
动态规划小结
package dynamic_programming;/** * @program: Aglorithm * @Date: 2019/6/6 16:36 * @Author: Kyrie * @Description: * * 动态规划小结 */public class Dynamic_Programming_Summary {}原创 2019-06-11 14:39:19 · 141 阅读 · 0 评论 -
动态规划——LeetCode121 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能...原创 2019-06-04 23:12:00 · 120 阅读 · 0 评论 -
动态规划——LeetCode120三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点(容易理解错)上。例如,给定三角形:[ [2], [3, 4], [6, 5, 7], [4, 1, 8, 3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很...原创 2019-06-04 21:33:17 · 110 阅读 · 0 评论 -
LeetCode12——整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2019-05-29 20:26:13 · 111 阅读 · 0 评论 -
LeetCdoe 801——使序列递增的最小交换次数(动态规划)
有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定...原创 2019-06-13 15:56:56 · 464 阅读 · 0 评论 -
链表的基本操作
package com.linkedlist.exe;/** * @program: LinkdeList * @Date: ***** * @Author: Kyrie * @Description: 链表的基本操作 */public class Demo1_LinkedList { private Node head; //指向头节点“指针”,其实是头节点的对象引用...原创 2019-05-13 10:00:25 · 58 阅读 · 0 评论 -
数组实现循环队列
package com.linkedlist.exe.com.queue.exe;import com.linkedlist.exe.Demo1_LinkedList;/** * @program: ******* * @Date: ******* * @Author: Kyrie * @Description: 数组实现循环队列 * 循环队列:不但充分利用了数组的空间,还避免...原创 2019-05-13 09:39:14 · 516 阅读 · 0 评论 -
数的最大公约数、最小公倍数、分解质因数、因数、因子数
package test.com;import java.util.ArrayList;public class Demo2_Gcd { //关于求解数的最大公约数、最小公倍数及分解质因数的小结 public static void main(String[] args) { int d = gcd(319, 377); System.ou...原创 2019-05-12 22:24:37 · 740 阅读 · 0 评论 -
判断链表是否有环、环的长度、环的入口点
分析:(当前链表中的数据无重复)1.直接遍历方式,将当前的节点(cur_node)从头节点开始比较直到当前节点的前一个节点(pre_node),若没有相同的值,则说明链表没有环。时间复杂度为O(N^2),过程有点像插入排序。2.借助额外空间,建立一个HashSet,将已经遍历过的节点的值放入集合中,若遍历至当前节点时,集合中已经存在该节点的值,则说明链表有环。时间复杂度为O(N),额外的空间...原创 2019-05-21 23:15:35 · 346 阅读 · 0 评论 -
LeetCode——寻找两个有序数组的中位数
题目描述:给定两个大小为 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-05-25 16:43:13 · 80 阅读 · 0 评论 -
LeetCode——无重复字符的最长子串
class Solution { public int lengthOfLongestSubstring(String str) { if(" ".equals(str)) return 1; LinkedList<String> queue = new LinkedList<&g...原创 2019-05-25 15:04:12 · 91 阅读 · 0 评论 -
LeetCode——两数相加
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ->...原创 2019-05-25 10:49:36 · 75 阅读 · 0 评论 -
删除k个数字后的最小值——小米OJ
package test.com;public class Hui05_Delete2_K_Value { public static String removeKDigits(String num, int k){ String numNew = num; for (int i = 0; i < k; i++) { boo...原创 2019-05-24 17:50:06 · 249 阅读 · 0 评论 -
堆实现优先队列
package basicSorted.com;import java.util.Arrays;/** * @Author Kyrie * @Description * 二叉堆实现优先队列 **/public class Code04_PriorityQueue { public static int[] arr; public static int size;...原创 2019-05-20 21:51:08 · 120 阅读 · 0 评论 -
常见排序算法小结
排序冒泡排序bubbleSort()选择排序selectSort()插入排序insertSort()package basicSorted.com;public class InsertionSorted2 { public static void main(String[] args) { int[] arr = {27,10,12,20,14,25,...原创 2019-05-19 14:14:45 · 92 阅读 · 0 评论 -
小米OJ之倔强青铜
不一样的排序描述:现在有 n 个数,需要用因子个数的多少进行排序,因子个数多的排在后面,因子个数少的排在前面,如果因子个数相同那么就比较这个数的大小,数大的放在后面,数小的放在前面。现在让你说出排序之后第 K 个位置的数字是多少。输入:第 1 个整数为整数 K,1 ≤K ≤ 10^6 ;第 2 个为整数 n,表示数字的数量,n<10^7;接下来有 n 个整数,每个数的大小不超过 ...原创 2019-05-04 22:08:12 · 121 阅读 · 0 评论