剑指offer
文章平均质量分 66
leetcode&剑指offer刷题
fan__lee
向前走,不回头
展开
-
剑指offer总
剑指1-2021-401-201、 二维数组查找2、 空格替换3、 输入一个链表,按链表从尾到头的顺序返回一个ArrayList4、 根据前序遍历和前序遍历还原二叉树5、 两个栈构造一个队6、 旋转数组7、 斐波那契数列8、 一只青蛙跳台阶(斐波那契数列相似问题)9、 变态跳台阶(斐波那契数列相似问题)10、矩形覆盖(斐波那契数列相似问题)11、二进制中的个数12、数值的整数次方13、调整数组奇偶数位置14、求链表倒数第k个数15、反转链表16、合并链表17、树的子结构原创 2021-07-11 16:40:32 · 110 阅读 · 0 评论 -
SQ刷题/17-24
文章目录17、获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salary18、查找当前薪水排名第二多的员工编号。。你可以不使用order by完成吗19、查找所有员工的last_name和first_name以及对应的。。20、查找员工编号emp_no为10001的最高工资21、查找所有员工自入职以来的薪水涨幅情况17、获取当前(to_date=‘9999-01-01’)薪水第二多的员工的emp_no以及其对应的薪水salary题目描述获取当前(to原创 2020-11-25 19:32:36 · 165 阅读 · 0 评论 -
剑指offer刷题の61-67
文章目录61、序列化二叉树62、给定一棵二叉搜索树,请找出其中的第k小的结点。61、序列化二叉树题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符原创 2020-11-23 19:21:23 · 102 阅读 · 0 评论 -
剑指offer/56-60
文章目录56、删除链表中重复的节点57、二叉树的下一个节点56、删除链表中重复的节点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5package M56TO60;import M10TO15.ListNode;import java.util.HashSet;public class SoluDeleteDuplica原创 2020-11-19 14:12:24 · 131 阅读 · 0 评论 -
剑指Offer/51-55
文章目录51、构建乘积数组51、构建乘积数组题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0]= A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。可知:left[i+1] = A[0]*...A[i-原创 2020-11-16 14:48:54 · 141 阅读 · 0 评论 -
剑指Offer/46-50
文章目录46、孩子们的游戏(圆圈中最后剩下的数,约瑟夫遍历)47、1+2+3+...+n46、孩子们的游戏(圆圈中最后剩下的数,约瑟夫遍历)题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m原创 2020-11-12 16:29:25 · 128 阅读 · 0 评论 -
剑指offer/41-45
文章目录41、和为S的连续正数序列42、和为S的两个数43、左旋转字符串41、和为S的连续正数序列题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按原创 2020-11-11 16:34:57 · 125 阅读 · 0 评论 -
剑指offer/36-40
文章目录36、两个链表第一个公共节点36、两个链表第一个公共节点题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路:对于两个这样的序列:0-1-2-3-4-5-nulla-b-4-5-null他们的公共点后的长度必定是相同的。也就是说4-5-null这后两个节点是共同的。那么可以这么推理:0-1-2-3-4-5-null a-b-4-5-null和a-b-4-5-null 0-1-2-3-4-原创 2020-11-10 14:39:34 · 216 阅读 · 2 评论 -
剑指offer/31-35
文章目录31、求1到n中1的个数32、把数组排成最小的数33、丑数34、第一个只出现一次的字符31、求1到n中1的个数题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。好家伙,直接转成字符串,挨个求。package M31TO3原创 2020-11-07 15:43:12 · 166 阅读 · 0 评论 -
算法心得--
文章目录1、动态规划1、动态规划如下:斐波那契数列:0,1,1,2,3,5,8,12,21,34…1、首先状态转移方程为:f(n) = f(n-1)+f(n-2)2、目标2,缓存并复用以往结果(完成)。图1的简单递归存在大量的重复任务。在线性规划解法中,我们把结果缓存在results列表,同时在results[i] = results[i-1] + results[i-2]中进行了复用。这相当于我们只需完成图2中红色部分的计算任务即可,时间复杂度瞬间降为O(n)3、目标3,按顺序从小往大算(原创 2020-11-05 21:49:32 · 251 阅读 · 0 评论 -
剑指offer/26-30
文章目录26、二叉搜索树与双向链表26、二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。package M26TO30;import M16TO20.TreeNode;import java.util.*;public class SoluConvert { public TreeNode Convert(TreeNode pRootOfTree) { if (pRootOfTree原创 2020-11-05 17:02:58 · 125 阅读 · 0 评论 -
剑指offer/21-25
21、栈压入、弹出题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)直接模拟即可。因为弹出之前的值都会先入栈,所以这里用个栈来辅助。1、 初始化:用指针i指向pushV的第一个位置, 指针j指向popV的第一个位置2、如果pushV[i]原创 2020-11-04 19:37:27 · 113 阅读 · 0 评论 -
剑指offer/16-20
文章目录16、合并链表16、合并链表思路:让一个新节点指向表头(较短的那个表)最小,然后比较被抽后的剩下的链表继续操作package M16TO20;import M10TO15.ListNode;public class MergeList { public ListNode Merge(ListNode list1, ListNode list2) { ListNode end; if(list1==null) return list2;原创 2020-11-02 20:07:44 · 89 阅读 · 0 评论 -
剑指offer/11-15
文章目录11、二进制中的个数12、数值的整数次方13、11、二进制中的个数输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 //Java中不能直接if (val & 1),需要写if ((val & 1)==1)if (val & 1) ++ans;正数判断(负数不对):'第一种'int val; // input dataint ans = 0;while (val != 0) { //取二进制方法 int tmp = val %原创 2020-10-29 16:31:51 · 116 阅读 · 0 评论 -
剑指offer/6-10
文章目录6、旋转数组7、斐波那契数列8、一只青蛙跳台阶9、变态跳台阶6、旋转数组把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。二分查找算法不限于运用在有序数组上。如果能够明确二分之后,答案存在于二分的某一侧,就可以使用二分。本题就是如此。这种二分查找难就难在,arr[mi原创 2020-10-28 15:18:12 · 200 阅读 · 0 评论 -
剑指offer/1-5
文章目录在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。package qiuzhike;import java.awt.geom.Ellipse2D;public class Solution { public static boolean Find(int target, int [][] array) { if(arra原创 2020-10-04 15:58:14 · 104 阅读 · 0 评论 -
力扣-leetcode刷题记录/两数之和-两数相加-python3
文章目录1 两数之和1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。要求:假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。实例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解决办法:首先想到的是两个for循环,直接暴力查找,但是与要求不符,数组中同一个元素不能使用两遍。原创 2020-09-02 09:34:34 · 256 阅读 · 0 评论