
剑指offer
剑指offer题解(java实现)
a282608054
这个作者很懒,什么都没留下…
展开
-
剑指offer40 最小的 K 个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:方法一:维护一个大小为k的大顶堆,复杂度:O(NlogK) + O(K),特别适合处理海量数据public class Solution { public ArrayList<Integer> GetLeastNumbers_Solut...原创 2019-08-27 17:07:25 · 94 阅读 · 0 评论 -
剑指offer14 整数拆分
题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。例子:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。题目链接:剑指offer14思路1:暴力递归class Solution { public int integerBreak(int n) { return proces...原创 2019-08-30 19:01:25 · 186 阅读 · 0 评论 -
剑指offer56 数组中只出现一次的数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题目链接:剑指offer56思路:先对每个数字异或运算,得到的结果是那两个不同数的异或bitResult,在找到这个数右侧第一次出现1是第几位,用index记录下来,接下来就按照这一位是否为1来分类异或,两个不同的数肯定在两个组public class Solution { pu...原创 2019-08-28 22:30:25 · 129 阅读 · 0 评论 -
剑指offer55.2 平衡二叉树
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。题目链接:剑指offer55.2public class Solution { boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { getDepth(root); return is...原创 2019-08-28 22:12:50 · 104 阅读 · 0 评论 -
剑指offer55.1 二叉树的深度
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目链接:剑指offer55.1public class Solution { public int TreeDepth(TreeNode root) { return getHigh(root); } int getHi...原创 2019-08-28 22:11:30 · 89 阅读 · 0 评论 -
剑指offer54 二叉查找树的第 K 个结点
题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。题目链接:剑指offer54思路:二叉查找树的中序遍历是有序的,中序遍历即可找出答案public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { ...原创 2019-08-28 22:10:09 · 141 阅读 · 0 评论 -
剑指offer53 数字在排序数组中出现的次数
题目描述:统计一个数字在排序数组中出现的次数。题目链接:剑指offer53思路:使用二分法模版(先看我的二分法模版那篇文章再来做着题就很简单),先找到这个数字第一次出现的位置,在找到这个数字最后一次出现的位置public class Solution { public int GetNumberOfK(int [] array , int k) { if(array =...原创 2019-08-28 22:07:46 · 97 阅读 · 0 评论 -
剑指offer51 两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。题目链接:剑指offer51思路:两个链表从头遍历,遍历到尾的时候,在从另外一个链表的头开始遍历,最后相等的地方就是第一个公共节点public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode l1 = pHead1, l2 = pHead2...原创 2019-08-28 22:04:40 · 110 阅读 · 0 评论 -
剑指offer50 第一次只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)题目链接 : 剑指offer50思路:第一次遍历使用一个数组map记录每个字符出现的次数,第二次遍历找到第一个只出现一次的字符public class Solution { public int FirstNotRe...原创 2019-08-28 22:01:29 · 98 阅读 · 0 评论 -
二分法模版
模版一.此模版可以找到第一个target出现的位置 public int binarySearch(int[] nums, int target) { if (nums == null || nums.length == 0) { return -1; } int start = 0, end = nu...原创 2019-08-28 20:28:50 · 139 阅读 · 0 评论 -
剑指offer48 无重复字符的最长子串
题目描述输入一个字符串(只包含 a~z 的字符),求其最长不含重复字符的子字符串的长度。例如对于 arabcacfr,最长不含重复字符的子字符串为 acfr,长度为 4。思路:滑动数组链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chua...原创 2019-08-28 18:32:43 · 151 阅读 · 0 评论 -
剑指offer47 礼物的最大价值
题目描述在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于 0)。从左上角开始拿礼物,每次向右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘1 10 3 812 2 9 65 7 4 113 7 16 5思路:动态规划状态dp[i][j]:走到当前位置时...原创 2019-08-28 17:28:15 · 237 阅读 · 0 评论 -
剑指offer46 把数字翻译成字符串
题目:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。例子:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。思路:动态规划状态dp[i] : 前i个字符可以解码的方法总数状态转移方程: 当前字符在1-9之...原创 2019-08-28 17:21:09 · 152 阅读 · 0 评论 -
剑指offer15 二进制中 1 的个数
题目描述:输入一个整数,输出该数二进制表示中 1 的个数。题目链接:剑指offer15思路:n&(n-1) 该位运算去除 n 的位级表示中最低的那一位。public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ ...原创 2019-08-30 19:35:39 · 111 阅读 · 0 评论