
算法与数据结构
EveryFriDay_ShuJk
这个作者很懒,什么都没留下…
展开
-
surrounded-regions
1.题目:Given a 2D board containing’X’and’O’, capture all regions surrounded by’X’. A region is captured by flipping all’O’s into’X’s in that surrounded region . For example,X X X X X O O X X X O X...原创 2018-03-16 22:37:07 · 256 阅读 · 1 评论 -
interleaving-string(交错字符串)
1、题目给定s1,s2,s3,找出s3是否由s1和s2的交织形成。例如,鉴于:s1 =“aabcc”,s2 =“dbbca”,当s3 =“aadbbcbcac”时,返回true。当s3 =“aadbbbaccc”时,返回false。2、分析过程动态规划:dp[i][j] 表示 s2 的前 i 个字符和 s1 的前 j 个字符是否匹配 s3 的前 i+j 个字符。初...原创 2018-04-11 22:19:40 · 1043 阅读 · 0 评论 -
Java程序员面试笔试宝典之链表
/** * 链表节点 */class Node{ Node next=null; int data; public Node(int data){ this.data=data; }}import java.util.*;public class MyLinkedList { Node head=null;//链表头 ...翻译 2018-04-05 10:20:55 · 372 阅读 · 0 评论 -
Java程序员面试笔试宝典之栈和队列
1、栈(1)实现一个栈 用数组实现一个栈:import java.util.Arrays;/** * 使用数组实现栈 */public class MyStack1<E> { private Object [] stack; private int size;//数组中存储元素的个数 public MyStack1(){ ...翻译 2018-04-05 12:33:44 · 248 阅读 · 0 评论 -
Java程序员面试笔试宝典之排序
常用的排序算法有:冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序。public class Sort { /** * 冒泡排序(由小到大排序) * 思路:对于给定的n个记录,从最后一个记录开始依次对相邻的两个记录进行比较,当后面的记录小于前面的记录时,交换位置, * 进行一轮比较和换位后,n个记录中的最小记录位于第1位;然后对...翻译 2018-04-05 23:33:46 · 285 阅读 · 0 评论 -
Java程序员面试笔试宝典之位运算
public class BitOperation { /** * 用移位操作实现乘法运算:把一个数向左移动n位相当于把概数乘以2的n次方,因此当乘法运算中的某个数字满足这个特点时, * 就可以用移位操作来代替乘法操作,从而提高效率。 */ public int powerN(int m,int n){//m乘以2的n次方 for(i...翻译 2018-04-06 10:15:39 · 343 阅读 · 1 评论 -
最大子数组和
题目1求数组中连续几个数的最大值。动态规划方法import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); ...转载 2018-04-12 21:36:06 · 283 阅读 · 0 评论 -
largest-rectangle-in-histogram(最大的矩形的直方图)
题目1 给定n个非负整数,表示每个小节的宽度为1的直方图的小节高度,找到直方图中最大矩形的面积。 以上是直方图,其中每个小节的宽度为1,给定高度= [2,1,5,6,2,3]。 最大的矩形显示在阴影区域,其面积= 10。例如,给定高度= [2,1,5,6,2,3],return10。代码实现import java.util.*;publi...翻译 2018-04-19 23:22:18 · 721 阅读 · 0 评论 -
permutation-sequence(排列序列)
题目集合[1,2,3,...,n]包含总共n!个不同的排列。通过按顺序列出和标记所有排列,我们得到以下序列(即n = 3):“123”“132”“213”“231”“312”“321”给定n和k,返回第k个序列。注意:给定n将介于1和9之间。分析过程回溯法。如何找出第16个(按字典序的){1,2,3,4,5}的全排列?1. 首先用16-1得到15...原创 2018-05-01 21:47:45 · 613 阅读 · 0 评论 -
permutations(排列)
题目1给定数字的集合,返回所有可能的排列。例如,[1,2,3]有以下排列:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2]和[3,2,1]。代码实现/** *回溯法求数组的全排列 */import java.util.ArrayList;public class Solution { public ArrayList<Ar...原创 2018-05-08 22:56:40 · 364 阅读 · 0 评论 -
minimum-window-substring(最小窗口)
题目给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含复杂度为O(n)的T中的所有字符。例如,S =“ADOBECODEBANC”T =“ABC”最小窗口是“BANC”。分析过程这道题的思路是:1) begin开始指向0, end一直后移,直到begin - end区间包含T中所有字符。记录窗口长度d2) 然后begin开始后移移除元素,直到移除的字符是...转载 2018-04-24 23:28:19 · 1532 阅读 · 0 评论 -
jump-game(跳跃游戏)
题目1给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素表示您在该位置的最大跳跃长度。确定您是否能够达到最后的索引。例如:A = [2,3,1,1,4],returntrue。A = [3,2,1,0,4],returnfalse。代码实现/** *贪心算法 */public class Solution { public b...原创 2018-05-10 11:54:02 · 1528 阅读 · 1 评论 -
valid-number(数字验证)
题目验证给定的字符串是否为数字。一些例子:“0”=>true“0.1”=> true“ABC”=>false“1 a”=> false“2E10”=>true代码实现1:正则表达式public boolean isNumber(String s) { return s.matches("(\\s)*([+-])?(([0-9]...转载 2018-04-26 22:43:04 · 1527 阅读 · 0 评论 -
spiral-matrix(螺旋矩阵)
题目给定m×n个元素(m行,n列)的矩阵,以螺旋顺序返回矩阵的所有元素。例如,鉴于以下矩阵:[ [1,2,3], [4,5,6], [7,8,9]]你应该返回[1,2,3,6,9,8,7,4,5]。代码实现代码1:import java.util.ArrayList;public class Solution { public Arra...原创 2018-05-05 21:46:22 · 502 阅读 · 0 评论 -
n-queens(N皇后问题)
题目1n皇后难题是将n皇后放在n×n棋盘上的问题,任意两个皇后不在同一行,同一列或同一斜线上。给定一个整数n,返回n皇后拼图的所有不同的解决方案。每个解决方案都包含n皇后位置的不同棋盘配置,其中'Q'和'.'分别表示皇后和空位。例如,对于四皇后拼图存在两种截然不同的解决方案:[ [“.Q ..”,//解决方案1 “...... Q”, “Q...” “..Q.”]...原创 2018-05-06 22:26:26 · 738 阅读 · 0 评论 -
sudoku-solver(数独问题)
题目编写一个程序,通过填充空单元格来解决数独谜题。空单元格由字符'.'表示。你可可以认为只有一个独特的解决方案。分析该题类似于八皇后问题代码实现public class Solution { public void solveSudoku(char[][] board) { if(board==null || board.length...原创 2018-05-15 23:45:42 · 539 阅读 · 0 评论 -
three-sum(3个数的和)
题目1:给定一个n个整数的数组S,是否存在S中的元素a,b,c,使得a + b + c = 0? 查找数组中所有唯一的三元组,它们的总和为零。注意:三元组中的元素(a,b,c)必须是非降序。 (即,a≤b≤c)解决方案集不能包含重复的三元组。例如,给定数组S = {-1 0 1 2 -1 -4}, 解决方案集是: (-1,0,1) (-1,-1,2)...转载 2018-06-14 22:06:53 · 914 阅读 · 0 评论 -
distinct-subsequences(不同子序列)
题目来自牛客网leetcode1.题目 给定一个字符串S和一个字符串T,计算S中与T相同的子序列的个数。字符串的子序列是由原始字符串形成的新字符串,通过删除字符中的一些(可以不是)而不干扰其余字符的相对位置。 (即“ACE”是“ABCDE”的子序列,而“AEC”不是)。这里是一个例子:S =“rabbbit”,T =“rabbit”返回3。2.分析过程 ...原创 2018-03-28 22:23:01 · 317 阅读 · 0 评论 -
gray-code(格雷码)
题目格雷码是一个二进制数字系统,其中两个连续值仅在一个位上不同。给定一个代表代码总位数的非负整数n,打印格雷码序列。 格雷码序列必须以0开头。例如,给定n = 2,返回[0,1,3,2]。 其格雷码序列是:00 - 001 - 111 - 310 - 2分析思路当n=1时,为[0,1]当n=2时,为[00,01,11,10]当n=3时,为[000,001,...翻译 2018-04-15 22:44:19 · 1759 阅读 · 0 评论 -
populating-next-right-pointers-in-each-node(填充每个节点中右下角的指针)
1.题目 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * next; }填充每个下一个指针指向其下一个右侧节点。 如果没有下一个正确的节点,则应将下一个指针设置为NULL。最初,所有下一个指针都设置...原创 2018-03-27 23:19:58 · 238 阅读 · 0 评论 -
连续子数组的最大和
题目来源于牛客网之剑指offer1.题目HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止...转载 2018-03-18 22:26:31 · 173 阅读 · 0 评论 -
longest-consecutive-sequence
题目来源于牛客网leetcode 分析过程来自Felix 的博客1.题目给定一个未排序的整数数组,找出最长连续元素序列的长度。例如,鉴于[100,4,200,1,3,2],最长的连续元素序列是[1,2,3,4]。 返回它的长度:4。你的算法应该以O(n)的复杂度运行。2.分析过程 实现思路需要做一些改变:我们先定义一个map,遍历一遍数组,将(key, value...转载 2018-03-18 22:40:41 · 166 阅读 · 0 评论 -
binary-tree-maximum-path-sum(二叉树的最大路径和)
1.题目 给定一个二叉树,找到最大路径和。路径可以在树中的任何节点开始和结束。例如:鉴于下面的二叉树, 1 / \ 2 3 返回62.分析过程 首先我们分析一下对于指定某个节点为根时,最大的路径和有可能是哪些情况: (1)最大路径包含该根节点 最大路径之和=根节点的值+深度遍历其左子树的路径和的最大值 +深...原创 2018-03-22 17:54:07 · 761 阅读 · 0 评论 -
word-ladder-ii(字梯)
1.题目给定两个单词(开始和结束)和一个字典,从头到尾查找所有最短的变换序列,以便:一次只能更改一个字母每个中间词必须存在于词典中例如,给定:start ="hit"end ="cog"dict =["hot","dot","dog","lot","log"]返回:[ ["hit","hot",&quo原创 2018-03-19 20:43:13 · 378 阅读 · 0 评论 -
word-ladder(字梯)
1.题目 给定两个单词(开始和结束)和一个字典,从头到尾查找最短变换序列的长度,以便:一次只能更改一个字母,每个中间词必须存在于词典中例如,给定:start ="hit"end ="cog"dict =["hot","dot","dog","lot","log"]由于最短的一个转换是"hit" -> "hot原创 2018-03-19 20:48:40 · 457 阅读 · 0 评论 -
best-time-to-buy-and-sell-stock(购买并抛售股票的最佳时机)
题目1(1)题目:假设你有一个数组,其中第i个元素是第i天给定股票的价格。如果您只允许完成至多一笔交易(即买入一只股票并出售一只股票),则设计一种算法以找到最大利润。(2)分析:分别计算第1天,第2天,...,第n-1天出售股票时的最大利润,再得出总的最大利润。(3)代码:代码1:public class Solution { public int maxProfit(...原创 2018-03-23 23:01:31 · 278 阅读 · 0 评论 -
大整数乘法
1.题目有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示输入例子1:72106547548473106236 982161082972751393输出例子1:70820244829634538040848656466105986748...转载 2018-03-20 22:27:46 · 689 阅读 · 0 评论 -
path-sum(路径和)
1.题目(1)题目1:给定一棵二叉树和一个和,确定树是否有根到叶的路径,这样沿路径加起来的所有值就等于给定的和。例如:鉴于下面的二叉树andsum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ ...原创 2018-03-30 18:44:42 · 336 阅读 · 0 评论 -
balanced-binary-tree(平衡二叉树)
1.题目 给定一个二叉树,确定它是否是高度平衡的。对于这个问题,一个高度平衡的二叉树被定义为一个二叉树,其中每个节点的两个子树的深度相差不会超过1。2.分析过程 思路:先写一个函数来求最大深度,对于二叉树的每一个节点,都求它的左子树和右子树的最大深度,如果两个深度之间的差大于1,那么就返回false。不断递归判断即可。 注:也可使用树的层次遍历来求树的深度,而不必使用...原创 2018-03-30 18:49:23 · 328 阅读 · 0 评论 -
Java程序员面试笔试宝典之数组
import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;public class MyArray { /** * 寻找数组中的最小值与最大值 * 有2种方法: ...翻译 2018-04-08 12:08:51 · 263 阅读 · 0 评论 -
triangle(三角形最短路径)
1.题目给定一个三角形,从上到下找到最小路径和。 您可以移动到下一行的相邻数字的每一步。例如,给出以下三角形[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶部到底部的最小路径和为11(即,2 + 3 + 5 + 1 = 11)。2.分析思路 (1)思路一:动态规划。 给定一个三角形,找出从顶到底的最...原创 2018-03-26 00:06:23 · 3633 阅读 · 0 评论 -
convert-sorted-list-to-binary-search-tree(转换排序列表到二进制搜索树)
1.题目 给定一个单元链表,元素按升序排序,将其转换为高度平衡的BST。2.分析思路思路来自牛客网JacobGo!这道题是要求把有序链表转为二叉搜索树,由于二分查找法每次需要找到中点,而链表的查找中间点可以通过快慢指针来操作。找到中点后,要以中点的值建立一个数的根节点,然后需要把原链表断开,分为前后两个链表,都不能包含原中节点,然后再分别对这两个链表递归调用原函数,分别连...原创 2018-03-31 22:08:24 · 276 阅读 · 0 评论 -
Java程序员面试笔试宝典之字符串
import java.util.ArrayList;import java.util.Arrays;public class MyString { /** * 字符串反转 * 问题描述:把一个句子中的单词进行反转,例如,"how are you",进行反转后为"you are how"。 */ public String reverse(St...翻译 2018-04-08 18:56:07 · 235 阅读 · 0 评论 -
Java程序员面试笔试宝典之二叉树
class TreeNode{ int data; TreeNode left,right; public TreeNode(int data){ this.data=data; left=null; right=null; }}import java.util.LinkedList;import java...翻译 2018-04-08 22:46:23 · 273 阅读 · 0 评论 -
pascals-triangle(帕斯卡三角、杨辉三角)
1.题目 (1) 题目1:给定numRows,生成帕斯卡三角形的第一个行。 例如,给定numRows = 5, 返回: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1...原创 2018-03-27 14:27:25 · 682 阅读 · 0 评论 -
three-sum(3个数的和)
题目1:给定一个n个整数的数组S,是否存在S中的元素a,b,c,使得a + b + c = 0? 查找数组中所有唯一的三元组,它们的总和为零。注意:三元组中的元素(a,b,c)必须是非降序。 (即,a≤b≤c)解决方案集不能包含重复的三元组。例如,给定数组S = {-1 0 1 2 -1 -4}, 解决方案集是: (-1,0,1) (-1,-1,2)...转载 2018-06-14 22:06:57 · 3987 阅读 · 1 评论