剑指offer
科比的缪斯
这个作者很懒,什么都没留下…
展开
-
剑指offer(1/20)
二叉搜索树的第k个结点给定一棵二叉搜索树,请找出其中的第k小的结点。public class Solution { int index = 0; TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot != null){ TreeNode node = KthNode(pRoot.left,k); if(node != null){ ret原创 2021-01-20 14:41:34 · 155 阅读 · 1 评论 -
剑指offer(1/19)
二叉树的下一个结点给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.v原创 2021-01-19 13:24:44 · 86 阅读 · 0 评论 -
剑指offer(1/18)
正则表达式匹配请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配public class Solution { public boolean match(char[] str, char[] pattern){ if (str == null原创 2021-01-18 13:35:55 · 82 阅读 · 0 评论 -
剑指offer(1/17)
条件限制求和求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。public class Solution { public int Sum_Solution(int n) { int sum = n; boolean ans = (n>0)&&((sum += Sum_Solution(n-1))>0); return sum;原创 2021-01-17 13:11:10 · 96 阅读 · 0 评论 -
剑指offer(1/16)
和为S的两个数字输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new Array原创 2021-01-16 11:41:37 · 119 阅读 · 0 评论 -
剑指offer(1/15)
数字在升序数组中出现的次数统计一个数字在升序数组中出现的次数。public class Solution { public int GetNumberOfK(int [] array , int k) { if(array.length <= 0 || array == null) return 0; int first = binarySearch(array,k); int last = binarySearch(array,k+1);原创 2021-01-15 15:00:43 · 74 阅读 · 0 评论 -
剑指offer(1/14)
第一次只出现一次的字符在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)public class Solution { public int FirstNotRepeatingChar(String str) { int res = -1; if(str ==null || str.length() == 0) return res;原创 2021-01-14 13:04:08 · 70 阅读 · 0 评论 -
剑指offer(1/13)
整数中1的个数求出1—13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int原创 2021-01-13 17:15:08 · 57 阅读 · 0 评论 -
剑指offer(1/12)
数组中出现长度超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。import java.util.Arrays;public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array);原创 2021-01-12 17:07:38 · 77 阅读 · 0 评论 -
剑指offer(1/11)
复杂链表的复制输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)//下面那段代码思维太混乱了,大家不要参考,如果要用map解决此题,看这段代码就好import java.util.*;public class Solution { public RandomListNode Clone(RandomListNo原创 2021-01-11 21:04:47 · 69 阅读 · 0 评论 -
剑指offer(1/10)
层次遍历从上往下打印出二叉树的每个节点,同层节点从左至右打印。import java.util.ArrayList;import java.util.LinkedList;public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<>();原创 2021-01-10 13:19:47 · 81 阅读 · 0 评论 -
剑指offer(1/9)
顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] mat原创 2021-01-09 23:02:30 · 81 阅读 · 0 评论 -
剑指offer(1/8)
合并两个排序链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。//递归/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/public class Solution { public ListNode Merge(ListNode list1,ListNode list2) {原创 2021-01-08 11:07:34 · 53 阅读 · 0 评论 -
剑指offer(1/7)
调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。public class Solution { public void reOrderArray(int [] array) { for(int i = 0 ;i < array.length; i++){ for(int j = array.length原创 2021-01-07 11:09:47 · 79 阅读 · 0 评论 -
剑指offer(1/6)
矩形覆盖我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?假设:n块矩形有f(n)种覆盖方法。进行逆向分析,要完成最后的搭建有两种可能。第一种情况等价于情形1中阴影部分的n-1块矩形有多少种覆盖方法,为f(n-1);第二种情况等价于情形2中阴影部分的n-2块矩形有多少种覆盖方法,为f(n-2);故f(n) = f(n-1) + f(n-2),还是一个斐波那契数列。。。。public class Solution {原创 2021-01-06 11:17:38 · 64 阅读 · 0 评论 -
剑指offer(1/5)
斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39n≤39public class Solution { public int Fibonacci(int n) { int f = 0,g = 1; for(int i = 0;i < n; i++){ g += f; f = g - f; }原创 2021-01-05 10:56:05 · 150 阅读 · 0 评论 -
剑指offer(1/4)
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tr原创 2021-01-04 11:11:49 · 71 阅读 · 0 评论 -
剑指offer(1/3)
替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String args[]) throws Exception{ BufferedReader bf =原创 2021-01-03 11:11:27 · 72 阅读 · 0 评论 -
剑指offer(1/2)
只出现一次的数字一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。// 前提知识:// 异或运算:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。// n^0 = n;// n^n = 0;// n^n^m = n^(n^m) 满***换律// 所以,我们可以让数组中的每一个数异或一下,最后会得到一个结果ret,就是两个出现一次的数字的异或结果这个结果肯定是由两个不同数字异或而来,因此我们找ret二进制中为1的位置i,因为原创 2021-01-02 12:02:46 · 195 阅读 · 2 评论