随笔分类 - oj记录
没事刷刷oj,总是会对自己有帮助的
摘要:Q:环形路上有n个加油站,第i个加油站的汽油量是gas[i]. 你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。 求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。
阅读全文
摘要:Q:有N个小朋友站在一排,每个小朋友都有一个评分,你现在要按以下的规则给孩子们分糖果:每个小朋友至少要分得一颗糖果,分数高的小朋友要他比旁边得分低的小朋友分得的糖果多。你最少要分发多少颗糖果? A: 先从左往右遍历,如果比左边大加一;再从右往左遍历,如果比右边大,选择当前值和右边值+1中大的那个。
阅读全文
摘要:Q:给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词 返回所有可能的结果 例如:给定的字符串s ="catsanddog", dict =["cat", "cats", "and", "sand", "dog"]. 返回的结果为["cat
阅读全文
摘要:Q:给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。 例如: 给定s=“leetcode”; dict=["leet", "code"]. 返回true,因为"leetcode"可以被分割成"le
阅读全文
摘要:Q:将给定的单链表L: L 0→L 1→…→L n-1→L n,重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→… 要求使用原地算法,并且不改变节点的值 例如:对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}. A: 链表从中点分割成两个,后面的倒装后,再
阅读全文
摘要:先序 递归: 非递归: 中序 递归: 非递归: 后序 递归: 非递归 层序 Morris遍历算法 引用:https://www.jianshu.com/p/484f587c967c Morris遍历法,能以O(1)的空间复杂度实现二叉树的中序遍历。 Morris遍历算法的步骤如下: 1. 根据当前节
阅读全文
摘要:Q:使用插入排序对链表进行排序。 A: 创建头结点; public ListNode insertionSortList(ListNode head) { if (head == null || head.next == null) return head; ListNode head0 = new
阅读全文
摘要:Q:在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。 A: 1.用sort,这样做……可以过,但很讨巧,不大好 public ListNode sortList(ListNode head) { if (head == null) return head; List<Integer
阅读全文
摘要:Q:对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上 A: 这个题……很多坑……写了好几次才写对。 最重要的一点,在计算斜率时,不能使用除法,会有误差。可以使用最大公约数。 public static int maxPoints(Point[] points) { //点数个数
阅读全文
摘要:Q:计算逆波兰式(后缀表达式)的值 运算符仅包含"+","-","*"和"/",被操作数可能是整数或其他表达式 例如: ["2", "1", "+", "3", "*"] → ((2 + 1) * 3) → 9↵ ["4", "13", "5", "/", "+"] → (4 + (13 / 5))
阅读全文
摘要:Q:求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest p
阅读全文
摘要:Q:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n 1并且m 1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
阅读全文
摘要:Q:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3
阅读全文
摘要:Q:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含
阅读全文
摘要:Q:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,
阅读全文
摘要:Q:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 T: 1.最
阅读全文
摘要:Q:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 T: 中序遍历,递归: 非递归:
阅读全文
摘要:Q:请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(
阅读全文
摘要:Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 A:BFS,偶数层reverse Q:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 A:BFS,比上面还简单,不用reverse(
阅读全文
摘要:Q:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 A: 递归: 非递归(感谢@hustZa): 利用DFS: 出栈的时候也是成对成对的 , 1.若都为空,继续; 2.一个为空,返回false; 3.不为空,比较当前值,值不等,返回fa
阅读全文

浙公网安备 33010602011771号