![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程题
蛋焊工
搬砖小学生
展开
-
面试题:二叉树的所有路径以及查询某个数字的路径
1、二叉树的所有路径: TreeNode节点定义: public static class TreeNode { Integer val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, ...原创 2021-07-29 18:17:56 · 135 阅读 · 0 评论 -
面试题:105. 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历preorder 与中序遍历inorder。请构造二叉树并返回其根节点。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorde...原创 2021-07-28 13:18:14 · 162 阅读 · 0 评论 -
【算法题】求最大子数组之和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n) public static void main(String[] args) { int[] array = {2,13,-12,21,-20,21}; getMaxValue(array); } private static int getMaxVal.原创 2021-07-27 13:59:28 · 220 阅读 · 0 评论 -
面试题:线程交替打印
线程交替打印 volatile static int i = 0; public static void main(String[] args) throws Exception { ReentrantLock lock = new ReentrantLock(); Condition condition1 = lock.newCondition(); Condition condition2 = lock.newCondition();原创 2021-07-26 12:52:07 · 102 阅读 · 0 评论 -
面试题:层级遍历二叉树,包含前序、中序、后序遍历
/** * 二叉树结构 */ private static class TreeNode { // 值 int value; // 左节点 TreeNode left; // 右节点 TreeNode right; public TreeNode(int value, TreeNode left, TreeNode right) { this.value = value; this.left = left; this.right = righ...原创 2020-09-13 18:34:32 · 207 阅读 · 0 评论 -
面试题:链表前半部分正序交叉后半部分逆序
/** * 给定一个链表 L: L0->L1->L2->L3->L4....Ln * 给出这样的链表:L: L0->Ln->L1->Ln-1->L2...... * 例如1: * 输入:head->1->2->3->4->5 * 输出:head->1->5->2->4->3 * 例如2: * 输入:head->1->2->3->4->5->6 *.原创 2020-09-13 18:28:35 · 220 阅读 · 0 评论 -
面试题:按大小合并k个有序链表
/** * 按大小合并k个有序链表 * * 例如 * 输入 * 链表1:head->1->3->5->7 * 链表2:head->2->4->5->8->10->12 * 链表3:head->1->2->3 * 输出:head->1->1->2->2->3->3->4->5->5->7->8->10->12 */.原创 2020-09-13 18:21:34 · 82 阅读 · 0 评论 -
面试题:交替合并两个链表
交替合并两个链表 给定一个链表 L1: L0->L1->L2->L3->L4....Ln给定一个链表 L2: Lm->Lm+1->L....LM+n例如 输入 链表1:head->1->3->5->7 链表2:head->2->4->6->8->10->12 输出:head->1->2->3->4->5->6->7->8->10->.原创 2020-09-13 18:18:23 · 405 阅读 · 0 评论 -
面试题: 检查链表是否存在环,并计算环的长度以及环的起点位置
/** * 链表结构 */ public static class ListNode { // next指针 ListNode next; // value值 int value; // 构造方法 public ListNode(int val) { next = null; value = val; } } /** * 检查链表是否存在环,并计算环的长度以及环的起点 * * 判断一个链表是否存在环有一个简单的方法,就是使用一个...原创 2020-09-13 18:13:56 · 312 阅读 · 0 评论 -
面试题:反转单链表
/** * 链表结构 */ public static class ListNode { // next指针 ListNode next; // value值 int value; // 构造方法 public ListNode(int val) { next = null; value= val; } } public static void main(String[] args) { ListNode head = new List...原创 2020-09-13 18:04:52 · 129 阅读 · 0 评论 -
算法(3)-二分查找
总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。由于n/2^k取整后>=1,即令n/2^k=1,可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn) public static boolean binarySearch(int[] a,int k){ ...原创 2019-02-20 18:48:27 · 180 阅读 · 0 评论 -
算法(1)-冒泡排序
冒泡算法核心就是两层for循环;时间复杂度O(n^2) public static void bubbleSort(int[] a) { for (int i=0;i<a.length;i++){ for(int j=i;j<a.length;j++){ if(a[i]>a[j]){//从小到大...原创 2018-12-13 10:22:18 · 152 阅读 · 0 评论 -
算法(2)-快速排序
快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流程: 从数列中挑出一个基准值。 将所有比基准值小的摆放在基准前面,所有比基准值大的摆...原创 2019-01-21 18:58:51 · 144 阅读 · 0 评论 -
面试题:反转队列前K个元素
1、直接把前k个元素压栈,放入新队列中,追加剩余的队列元素 public static void reverseKQueue(Queue queue,int k){ Stack stack=new Stack(); Queue newQueue=new LinkedList(); int size=queue.size(); ...原创 2019-01-30 17:20:06 · 2010 阅读 · 0 评论 -
面试题:使用两个栈进行排序
解题思路:循环遍历要排序要排序的栈,第一次遍历时直接把数据放入栈2中,在下次遍历时,比较栈1出栈的数据与栈2数据的大小,如果栈2数据大于要压入的数时,进行出栈压入栈1中,直到数据比要压入数小,同时记录栈2出栈次数j,然后压入数据,再把压入栈1的数据重新压回到栈2中。 public static Stack<Integer> sortBy2Stack(Stack<In...原创 2019-01-30 16:32:33 · 2024 阅读 · 0 评论 -
面试题:队列和栈相互转化
1、两个队列实现一个栈解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向队列1内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的。push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最...原创 2019-01-30 15:10:12 · 274 阅读 · 0 评论 -
面试题:大(小)顶堆
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)...原创 2019-01-31 16:13:14 · 993 阅读 · 0 评论 -
面试题:手写单链表(包含反转链表)
public class ListNode<Integer> { Node<Integer> head;//头部节点 int size=0;//节点数 public class Node<T>{ T vaule;//data值 Node<T> next;//指向下一个节点 p...原创 2019-02-01 14:01:06 · 1350 阅读 · 0 评论 -
面试题:删除第n个链表节点和删除倒数第n个链表节点
第一题:删除第n个节点 思路:如果要删除第n个节点,只需要第n-1个节点next指针指向n+1节点即可。 /** * 删除第n个节点 * @param n */ public void deleteNode(int n){ if(n>size||n<0){ throw new IndexOut...原创 2019-02-01 15:47:42 · 1271 阅读 · 0 评论 -
面试题:‘(‘ 与 ‘)‘匹配问题
import java.util.Scanner;import java.util.Stack;public class Main { public static void main(String[] args) { Stack<Character> stack = new Stack<Character>(); Scanner read=new Sca...原创 2017-10-29 19:49:38 · 358 阅读 · 0 评论 -
面试题:删去k个数字后的最小值(最大值)
题目: 我们来举一个栗子:给定整数 541270936,要求删去一个数,让剩下的整数尽可能小。此时,无论删除哪一个数字,最后的结果都是从9位整数变成8位整数。既然同样是8位整数,我们显然应该优先把高位的数字降低,这样对新整数的值影响最大。第一次删除: 如何把高位的数字降低呢?很简单,我们把原整数的所有数字从左到右进行比较,如果发现某一位的数字大于它右面的数字,那么在...原创 2019-01-29 10:28:17 · 2182 阅读 · 1 评论 -
面试题:归并两个有序数组成一个有序数组
方法一:直接比较每一个数据,时间复杂度O(n) /** * 时间复杂度O(n) * merge两个数组 * @param a 递增 * @param b 递增 * @return */ public static int[] merge(int[] a,int[] b){ int i=0,j=0,n=...原创 2019-01-24 18:11:07 · 1249 阅读 · 0 评论 -
面试题:找到数组中第二大(小)的元素
方法一:直接排序(冒泡n^2、快排nlgn)根据索引找到对应值方法二:遍历一次,定义两个变量:一个变量用来存储数组的最大数,初始值为数组首元素,另一个变量用来存储第二大的数。 编码:public static void findSecond(int a[]){ if(a.length<3){ System.out.println("数组太...原创 2019-01-29 11:43:18 · 3550 阅读 · 6 评论 -
面试题:leetcode287. 寻找重复数
方法一:使用HashMap存储数据,找到数据直接结束循环 public static void findFirstRepeat(char[] array) { Map<Object, Object> map = new HashMap<>(); for (int i = 0; i <array.length ; i++)...原创 2019-01-29 16:07:47 · 1338 阅读 · 0 评论 -
面试题:找出数组中第一个未重复的数
方法一:使用LinkedHashMap存储数据 public static void findFirstNotRepeat(char[] array) { Map<Object, Integer> map = new LinkedHashMap<>(); for (int i = 0; i <array.length ;...原创 2019-01-29 16:22:15 · 847 阅读 · 0 评论 -
面试题:找出数组中唯一一个未重复的数(找出二个不同的未重复的数据)
1、找出数组中唯一一个未重复的数异或:一个数异或它本身等于0 public static int NumberOf1(int[] arr) { int len = arr.length; int res = -1; if(len > 1) { res = arr[0]; for (i...原创 2019-01-29 17:33:36 · 2942 阅读 · 0 评论 -
面试题:数组重排序(相对位置不变)
给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变2. 不能使用额外存储空间例子如下输入 0, 3, 0, 2, 1, 0, 0输出 0, 0, 0, 0, 3, 2, 1解析:从尾部开始设置两个指针,slower指针指向后面第一个出现0的位置,faster指向last前...原创 2019-01-29 18:19:35 · 2660 阅读 · 0 评论 -
面试题:'(' 与 ')'匹配问题
'(' 与 ')'匹配问题可以使用栈的方式进行匹配,如果栈顶为'(',此时传进来的')',则匹配'('出栈,否则不匹配进行压栈 public static void match(String str) { Stack<Character> stack = new Stack<Character>(); for (int i ...原创 2019-01-30 11:04:29 · 253 阅读 · 0 评论 -
如何判断一个元素在亿级数据中是否存在?
前言最近有朋友问我这么一个面试题目:现在有一个非常庞大的数据,假设全是 int 类型。现在我给你一个数,你需要告诉我它是否存在其中(尽量高效)。需求其实很清晰,只是要判断一个数据是否存在即可。但这里有一个比较重要的前提:非常庞大的数据。常规实现先不考虑这个条件,我们脑海中出现的第一种方案是什么?我想大多数想到的都是用HashMap来存放数据,因为它的写入查询的效...原创 2018-12-20 14:41:33 · 635 阅读 · 0 评论