Java Algorithm
本专栏内容主要涉及:
程序员小灰之漫画算法
(左神)算法初级
小米OJ练习
LeetCode练习
Kyrie2011
这个作者很懒,什么都没留下…
展开
-
50.实现 pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有...原创 2020-03-02 12:41:36 · 424 阅读 · 0 评论 -
面试题06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ import java....原创 2020-03-01 16:06:14 · 180 阅读 · 0 评论 -
面试题05. 替换空格
难度:简单请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”public class ReplaceSpace { public static void main(String[] args) { System.out.println(repalceSpac...原创 2020-03-01 12:22:31 · 248 阅读 · 0 评论 -
面试题20. 表示数值的字符串
验证给定的字符串是否可以解释为十进制数字。例如:“0” => true" 0.1 " => true“abc” => false“1 a” => false“2e10” => true" -90e3 " => true" 1e" => false“e3” => false" 6e-1" => true" 99e2.5 ...原创 2020-03-01 01:46:51 · 145 阅读 · 0 评论 -
只出现一次的数字——位运算
只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4class Solution { public int singleNumber(...原创 2019-06-11 15:37:19 · 117 阅读 · 0 评论 -
面试中的怎么体现出算法
很多前端都觉得算法是特别高大上的东西,但其实和人工智能这种硬核(虽然调参也不怎么硬核)的东西不同,算法可能会复杂,也可能很容易理解。比如这道题就是一个非常经典的题目,很多公司的面试都会聊这道题。这道 medium 难度的问题,很适合展示一个有着丰富生活经验的程序员,如何在不需要算法基础的情况下,凭借人类的聪明才智,找到解决方案。热身首先,先找一下它的简化版 2sum 来热热身。最...转载 2019-06-11 15:23:31 · 334 阅读 · 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 · 164 阅读 · 0 评论 -
二分查找及其变种小结
//注意边界条件//二分查找的基本原型//二分查找的变种及改进//二分查找最接近目标数(貌似没成功)原创 2019-06-08 22:56:25 · 184 阅读 · 0 评论 -
大数运算
public class BigNumUtil { /** * 大数相乘 * @param a * @param b * @return */ public static String multi(String a,String b){ //1.判断相乘之后的符号 char signA = a.ch...转载 2019-06-06 16:14:48 · 90 阅读 · 0 评论 -
LeetCode 23合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * public class ListNode { * in...原创 2019-06-06 14:34:04 · 74 阅读 · 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 · 124 阅读 · 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 · 120 阅读 · 0 评论 -
动态规划——LeetCode63 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0...原创 2019-06-04 17:15:06 · 102 阅读 · 0 评论 -
动态规划—— LeetCode62 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向...原创 2019-06-04 11:10:27 · 141 阅读 · 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 · 110 阅读 · 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 · 132 阅读 · 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 · 100 阅读 · 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 · 143 阅读 · 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 · 823 阅读 · 0 评论 -
LeetCode14 —— 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。class Solution { public String longestCommo...原创 2019-05-29 22:13:16 · 110 阅读 · 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 · 109 阅读 · 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 · 136 阅读 · 0 评论 -
LeetCode09 —— 判断一个整数是否是回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。...原创 2019-05-29 12:49:08 · 179 阅读 · 0 评论 -
LeetCode——字符串转整数
class Solution { public int myAtoi(String str) { if(str == null || "".equals(str)) return 0; char[] arr = str.toCharArray(); int index = 0; for(int i = ...原创 2019-05-29 11:44:47 · 70 阅读 · 0 评论 -
LeetCode 7 ——大整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。/*class S...原创 2019-05-28 22:57:57 · 305 阅读 · 0 评论 -
LeetCode853——车队
class Solution { public int carFleet(int target, int[] position, int[] speed) { HashMap<Integer,Integer> map=new HashMap<>(); if(position.length==0) ...原创 2019-05-27 09:15:09 · 214 阅读 · 0 评论 -
LeetCode1053——交换一次的先前排列
题目描述给你一个正整数的数组 A(其中的元素不一定完全不同),请你返回可在 一次交换(交换两数字 A[i] 和 A[j] 的位置)后得到的、按字典序排列小于 A 的最大可能排列。如果无法这么操作,就请返回原数组。示例 1:输入:[3,2,1]输出:[3,1,2]解释:交换 2 和 1示例 2:输入:[1,1,5]输出:[1,1,5]解释:这已经是最小排列示例 ...原创 2019-05-26 20:07:38 · 746 阅读 · 0 评论 -
LeetCode1052. 爱生气的书店老板
今天,书店老板有一家店打算试营业 customers.length分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密...原创 2019-05-26 16:02:59 · 598 阅读 · 1 评论 -
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 · 88 阅读 · 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 · 99 阅读 · 0 评论 -
LeetCode——两数相加
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ->...原创 2019-05-25 10:49:36 · 102 阅读 · 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 · 275 阅读 · 0 评论 -
删除K个数字,使得删除后的数字组成的数尽可能小
package test.com;import java.util.Arrays;//需求:删除K个数字,使得删除后的数字尽可能小public class Hui05_Delete_K_Value { public static int[] backMinNum(int[] array, int k){ int high = -1; int in...原创 2019-05-23 22:31:26 · 527 阅读 · 0 评论 -
寻找全排列的下一个数
package test.com;import java.util.Arrays;public class Hui04_FindNum { /** * 给定一个数,经过全排列后,找出该数的大于该数的最小值 */ public static int findNum(int num){ String str = Integer.toString...原创 2019-05-23 17:47:08 · 129 阅读 · 0 评论 -
栈实现队列
package test.com;import java.util.Stack;/** * 1.栈实现队列 */public class Hui03_StackToQueue { /* 使用两个栈实现队列 */ public Stack<Integer> pushStack = new Stack<>(); //用来...原创 2019-05-22 22:01:20 · 107 阅读 · 0 评论 -
在无序数组中,经过排序后,找相邻元素的最大差值(O(N))
package Interview.com;/** * @program: Aglorithm * @Date: 2019/5/22 18:25 * @Author: Kyrie * @Description: * 一个无序数组,如何求出该数组排序后的任意相邻元素的最大差值 * 要求时间和空间复杂度尽可能低。 * 常规操作: 利用快排或堆排堆...原创 2019-05-22 20:32:18 · 1585 阅读 · 0 评论 -
最小栈的实现
public class Code2_Stack_Min { public Stack<Integer> mainStack = new Stack<>(); //Stack集合 public Stack<Integer> minStack = new Stack<>(); //入栈 public void p...原创 2019-05-22 13:12:03 · 82 阅读 · 0 评论 -
判断链表是否有环、环的长度、环的入口点
分析:(当前链表中的数据无重复)1.直接遍历方式,将当前的节点(cur_node)从头节点开始比较直到当前节点的前一个节点(pre_node),若没有相同的值,则说明链表没有环。时间复杂度为O(N^2),过程有点像插入排序。2.借助额外空间,建立一个HashSet,将已经遍历过的节点的值放入集合中,若遍历至当前节点时,集合中已经存在该节点的值,则说明链表有环。时间复杂度为O(N),额外的空间...原创 2019-05-21 23:15:35 · 358 阅读 · 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 · 143 阅读 · 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 · 102 阅读 · 0 评论