
算法
本专栏记录在大厂面试中遇到的手撕算法,持续更新~
God-Hrh
记录学习笔记和工作经验。
展开
-
二分排序算法整理(Java版)
## 快速排序时间复杂度O(nlogn) 空间复杂度O(logn) 为栈所需辅助空间 不稳定排序思想: 1. 确定轴点。对无序序列首先找到一个轴点,一般选序列的第一个元素。 2. 寻找轴点的正确位置。low指向序列的第一个元素,height指向最后一个元素。先寻找右边第一个比轴点小的元素,如果找不到就height--; 否则把这个比轴点小的值赋给low位置的元素。接着再从左边找第一个比轴点大的元素,找不到就low++;否则就把这个大元素赋值给height位置的元素。直到low>=height原创 2022-08-28 18:44:05 · 1152 阅读 · 0 评论 -
[算法面试题]链表求和
给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295输出:9 -原创 2021-05-06 09:05:48 · 175 阅读 · 0 评论 -
数字字符串转化成IP地址
链接:https://www.nowcoder.com/questionTerminal/ce73540d47374dbe85b3125f57727e1e来源:牛客网现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)示例1输入“25525522135”输出[“255.255.22.135”,“255.255.221原创 2021-03-18 17:02:22 · 1643 阅读 · 0 评论 -
二叉树的之字形层序遍历
链接:https://www.nowcoder.com/questionTerminal/47e1687126fa461e8a3aff8632aa5559来源:牛客网给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树之字形层序遍历的结果是[[3],[20,9],[15,7]]示例1输入{1,#,2}输出[[1],[2]]import java.util.*;/*原创 2021-03-18 17:01:01 · 544 阅读 · 0 评论 -
重构二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题解:import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Stack;/** * @author Heerh * @version 1.0 * @date 2020/10/1 17:16 */public class Demo { publ原创 2020-11-07 14:44:00 · 213 阅读 · 0 评论 -
银行换钱最少硬币问题
问题描述:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? 将问题进行抽象,最后达到什么程度了,给出任意面值集合V,凑够的面值为m,求所需硬币最少的个数 j. 如果没有任何一种零钱组合能组成总金额,返回-1。举例一:输入V={1, 2, 5},m=11输出3 (5+5+1共三枚硬币)举例二:输入V={2},m=3输出-1(无法兑换)代码实现:public int changeCoin(int[] coins, int amount) { i转载 2020-09-04 10:15:16 · 447 阅读 · 1 评论 -
从一组数字中选出非相邻数字和的最大值
问题描述:给定一组数字,要求从这组数字里找出非 相邻数字和的最大值。举例:输入:4 1 1 9 1输出:13(9+4)输入:1 2 4 1 7 8 3输出:13 (8+4+1)代码实现:public class Demo { //递归实现 public static int rec_opt(int[] arr, int i) { if (i == 0) return arr[0]; else if (i == 1) return arr[0] >原创 2020-09-04 09:29:49 · 826 阅读 · 0 评论 -
给一个链表,输出去掉第k个节点的链表
class ListNode{ public int val; public ListNode next; public ListNode(int val) { this.val = val; }}public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int k = sca原创 2020-08-24 16:42:34 · 204 阅读 · 0 评论 -
求以下数列的和: f(n)=1/5-1/10+1/15-1/20+.......1/(5*(2*n-1))-1/(5*2*n)。
题目描述:Java答案:public class Main { public static void main(String[] args) { //前面乘的1/5 Double x = 0.2; Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); //对输入的数进行递归 Double aDouble = get(i); aDouble *= x; System.out.print原创 2020-08-07 10:14:30 · 354 阅读 · 0 评论 -
[编程题]序列和
给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N。答案可能有多个,我我们需要找出长度最小的那个。例如 N = 18 L = 2:5 + 6 + 7 = 183 + 4 + 5 + 6 = 18都是满足要求的,但是我们输出更短的 5 6 7输入描述:输入数据包括一行: 两个正整数N(1 ≤ N ≤ 1000000000),L(2 ≤ L ≤ 100)输出...原创 2020-04-03 18:20:02 · 872 阅读 · 0 评论