随笔分类 -  剑指Offer编程题

摘要:[编程题] lk 剑指 Offer 29. 顺时针打印矩阵 题目信息 思路 定义上下左右边界,循环打印 注意 如何返回一个空的数组的问题。借助stream把list转一下。 Java代码 import java.util.*; import java.util.stream.*; class Sol 阅读全文
posted @ 2020-08-02 23:40 北鼻coder 阅读(179) 评论(0) 推荐(0)
摘要:[编程题] 删除链表中的重复节点 (保留重复节点一次) 题目信息 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->-2>3->4->5 方法 三指针 Java代码 /* public c 阅读全文
posted @ 2020-08-02 16:02 北鼻coder 阅读(433) 评论(0) 推荐(0)
摘要:[编程题] lk [股票类买卖问题(多个情况)--动态规划问题的综合提升] 题目:lk:121 122 123 188 309 714 LeetCode 上拿下如下题目: 买卖股票的最佳时机 买卖股票的最佳时机 II 买卖股票的最佳时机 III 买卖股票的最佳时机 IV 最佳买卖股票时机含冷冻期 买 阅读全文
posted @ 2020-08-01 13:29 北鼻coder 阅读(830) 评论(0) 推荐(0)
摘要:[编程题] lk 300. 最长上升子序列-动态规划 题目 输入输出 注意的问题 这里说的是上升的可以是非连续的子序列的最长长度,可以采用动态规划来做。 思想: 转移方程: ​ 我们在某点nums[i] 只要看其前边的0~i-1个比nums[i]小的数的最大dp[j]值。 那么,到dp[i] 的值就 阅读全文
posted @ 2020-07-31 17:54 北鼻coder 阅读(154) 评论(0) 推荐(0)
摘要:[编程题] nk 二分查找的递归和非递归实现 题目 输入输出 见上 注意的问题 在二分查找的代码中,如果发现A[mid] == val,此时不能直接返回mid,而是还是需要往前遍历,看是否有相同的数字,有相同的数字的话,返回最前边的该数的索引。 方法1:非递归 //方法1:非递归 public in 阅读全文
posted @ 2020-07-31 17:06 北鼻coder 阅读(152) 评论(0) 推荐(0)
摘要:[编程题] lk 231. 2的幂 题目 输入输出 方法1:位运算 //方法3:使用位运算消除1 /*思想:如果是2的n次方,那么它的二进制肯定是0000000100000这种样子,其中是只有一个1(有可能是0000001),我们用位运算消除一次,看能否消除为0,就判断是否是2的幂次方*/ publ 阅读全文
posted @ 2020-07-30 20:37 北鼻coder 阅读(111) 评论(0) 推荐(0)
摘要:[编程题] nk:数组中只出现一次的数字 输入输出 无 思路 方法1:借助两个set集合 方法2:借助栈 Java代码(方法1) /*方法1:set集合 拿两个set集合,在遍历的时候如果第一次出现的元素就直接放入set集合,当第二次出现都放在set2中,放完之后从set中排序set2中 含有元素, 阅读全文
posted @ 2020-07-30 00:40 北鼻coder 阅读(175) 评论(0) 推荐(0)
摘要:[编程题] nk:连续子数组的最大和 输入输出 无 思路 方法:动态规划 Java代码 public class Solution { //方法1:动态规划 public int FindGreatestSumOfSubArray1(int[] array) { //[6,-3,-2,7,-15,1 阅读全文
posted @ 2020-07-29 23:34 北鼻coder 阅读(130) 评论(0) 推荐(0)
摘要:牛客编程tips(数组、列表、字符串) 一、输入输出一般技巧 1、解决多行的输入输出 描述 Java代码 public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt() 阅读全文
posted @ 2020-07-28 14:10 北鼻coder 阅读(342) 评论(0) 推荐(0)
摘要:[编程题] 递归实现等差数列和阶乘 需求 使用递归实现等差数列 Java代码 package nlikou; /** * @author jiyongjia * @create 2020/7/26 - 18:40 * @descp: */ public class P11_jiecheng { pu 阅读全文
posted @ 2020-07-26 18:56 北鼻coder 阅读(590) 评论(0) 推荐(0)
摘要:[编程题] 基础:如何使用大顶堆和小顶堆找topN 需求 (1)我们如何从一个链表或者数组中,找到第k大的数,或者前k大的数。使用小顶堆。(输出是从小到大排列的前K大的数) (2)我们如何从一个链表或者数组中,找到第k小的数,或者前k小的数(输出的堆是堆顶最大,其他不是序列顺序),使用大顶堆。 小顶 阅读全文
posted @ 2020-07-26 12:23 北鼻coder 阅读(1275) 评论(0) 推荐(0)
摘要:[编程题] lc:剑指 Offer 54. 二叉搜索树的第k大节点 [编程题] JZ:剑指 Offer 62. 二叉搜索树的第k小节点 <1>题目1 描述: 输入输出 思路 根据二叉搜索树的特点: 根据二叉搜索树的特点,中序遍历是从小到大排序,求第k小恰好是第k个节点,我们按照左 根 右 搜索。(搜 阅读全文
posted @ 2020-07-26 10:29 北鼻coder 阅读(184) 评论(0) 推荐(0)
摘要:[编程题] JZ65 矩阵中的路径 题目描述 输入输出案例 参考 参考 思路 使用回溯、递归、枚举的思想 代码 class Solution { public boolean exist(char[][] board, String word) { //用于标记是否已经被访问的二维数组 boolea 阅读全文
posted @ 2020-07-25 22:20 北鼻coder 阅读(208) 评论(0) 推荐(0)
摘要:[编程题] JZ57 二叉树的下一个节点 题目描述 参考 参考讲解 思路 主要根据中序遍历二叉树的特点: 如果此节点有右子树,就循环找出该右子树的最深处的左子树。 如果此节点无右子树,则返回的就应该是其父亲节点(这里存在一直往上返回其父节点。) 代码 /* public class TreeLink 阅读全文
posted @ 2020-07-25 17:12 北鼻coder 阅读(145) 评论(0) 推荐(0)
摘要:[编程题] JZ4 重建二叉树 参考 参考讲解 思路 我们根据前序遍历的首节点就指定二叉树的根,我们在中序遍历中查找这个根,就可以把中序遍历分为两部分,即左子树和右子树。那么,我们知道了左子树的长度,我们也可以在前序遍历中知道前序遍历中左子树的数组范围。此时: 我们知道了前序遍历中的左子树的子数组, 阅读全文
posted @ 2020-07-25 16:29 北鼻coder 阅读(184) 评论(0) 推荐(0)
摘要:[编程题] nk:链表中的入环节点 题目描述 输入输出例子 无 思路 方法1、借助哈希表 思想:我们通过一个dummyNode不断遍历每一个节点,当我们每次遍历到这个当前节点的时候就看他在不在哈希表中,不在的话加入进去;在的时候就恰好这个节点就是入环节点。 时间复杂度:O(n) Java代码 imp 阅读全文
posted @ 2020-07-22 11:22 北鼻coder 阅读(263) 评论(0) 推荐(0)
摘要:[编程题] lc:剑指 Offer 14- I. 剪绳子 题目描述 输入输出例子 思路 方法1、从数据公式上探索 Java代码 class Solution { public int cuttingRope(int n) { //情况1:对于两种极端情况先讨论 if(n==1 || n==2){re 阅读全文
posted @ 2020-07-21 09:48 北鼻coder 阅读(188) 评论(0) 推荐(0)
摘要:lc 剑指 Offer 09. 用两个栈实现队列 题目描述 输入输出描述 思路 1、使用传统的栈Stack即可完成 2、使用Deque数据结构堵住一端(堵住首) (addLast(),removeLast) 或者堵住尾(addFirst();removeFirst) 3、使用Deque数据结构堵住一 阅读全文
posted @ 2020-07-20 12:05 北鼻coder 阅读(218) 评论(0) 推荐(0)
摘要:单链表判断是否回文 题目描述 思路 三个指针,分别n1,n2,n3;三个指针不断往后移动。 1、总体思路 找到中间节点,然后把后半个链表反转后与前半部分比较。 (注意:奇数个链表的话是从中点的后一个节点逆置;偶数个链表的话从中间链表的节点逆置) 2、问题是如何找到中间节点 使用快慢指针,两指针一开始 阅读全文
posted @ 2020-07-13 22:24 北鼻coder 阅读(509) 评论(0) 推荐(0)
摘要:翻转单链表 题目描述 思路 三个指针,分别n1,n2,n3;三个指针不断往后移动。 Java代码 方法1:三个指针标记循环往后走 //方法3:三个指针循环后移 public ListNode reverseList(ListNode head) { if(head==null) {return nu 阅读全文
posted @ 2020-07-13 21:44 北鼻coder 阅读(257) 评论(0) 推荐(0)