![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
Fantastic_HQ
厚积才能薄发。
展开
-
二维数组的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。//题目思考: 从哪里进行判断比较比较适合,经分析,左下角和右上角进行判断都是可行的办法.为什么不从左上角开始搜寻呢?因为左上角向右和向下都是递增,那么对于一个点,对于向右和向下会产生一个岔路;如果我们选择从左下脚开始搜寻的话,如原创 2017-04-28 18:10:46 · 486 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 public int[] reOrderArray(int[] array) { // write code here List<int> listOdd = new Lis原创 2017-05-04 12:09:33 · 174 阅读 · 0 评论 -
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。解法一:if(head==null||k<=0)return null; ListNode nodePre=head; ListNode nodeLast=head; for(int i=1;i<k;i++){ if(nodePre.next!=null)nodeP原创 2017-05-04 18:09:16 · 176 阅读 · 0 评论 -
反转链表
输入一个链表,反转链表后,输出链表的所有元素。 public ListNode ReverseList(ListNode pHead) { // write code here ListNode NextHead = null; ListNode PreHead = null; if (pHead==nu原创 2017-05-05 11:34:57 · 156 阅读 · 0 评论 -
合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。//首先进行分析,假如输入链表一是59,链表二是68,那么我们 //进行传递的是(5,6)-->(6,8)-->(8,9),返回的依次是5,6,8,9 //那么可以看出可以进行递归处理,每次传递的都是一个是next,一个还是此节点 //进行判断,。注意边界条件! public ListNode Merge(L原创 2017-05-07 20:44:36 · 150 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) public bool HasSubtree(TreeNode pRoot1, TreeNode pRoot2) { // write code here if(pRoot2==null||pRoot1==null) {原创 2017-05-09 16:18:29 · 196 阅读 · 0 评论 -
二叉树的镜像
二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 //递归 public TreeNode Mirror(TreeNode root)原创 2017-05-09 17:28:26 · 174 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 List<List<int>> returnList = new List<List<int>>(); List<int> list = new List<int>(); public List<L原创 2017-06-22 10:29:32 · 177 阅读 · 0 评论 -
字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。//以下使用深度优先搜索,属于图算法的一种,英文缩写为DFS即Depth First Search. using System原创 2017-06-22 16:24:16 · 210 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 public int MoreThanHalfNum_Solution(int[] numbers) { if (numbers==nu原创 2017-06-23 15:04:04 · 193 阅读 · 0 评论 -
最小的K个数 (最小堆)
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4//冒泡排序,時間复杂度 using System.Collections.Generic; class Solution { public List<int> GetLeastNumbers_Solution(int[] input, int k)原创 2017-06-23 15:50:55 · 477 阅读 · 0 评论 -
数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数。//考虑指数的正负数和0的时候,这种解法巧妙的绕过了指数为0的时候 public double Power(double thebase, int exponent) { // write code here //求double类原创 2017-05-04 11:40:19 · 165 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)//比较独特的解法,通过归纳得出,影响出栈的主要是最先出栈的前两个(大小不超2),和最后两个的大原创 2017-05-11 15:59:25 · 234 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public static string replaceSpace(string str) { StringBuilder sb1 = new StringBuilder();原创 2017-04-28 18:51:18 · 202 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } }*/ public cla原创 2017-05-02 10:29:27 · 164 阅读 · 0 评论 -
重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。class Solution { public TreeNode reConstructBinaryTree(int[] pre, int[] ti原创 2017-05-02 15:22:55 · 193 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。using System.Collections.Generic; class Solution { Stack stackPop=new Stack(); Stack stackPush=new Stack(); public void push(int node) {原创 2017-05-02 17:02:45 · 193 阅读 · 0 评论 -
斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39class Solution { public int Fibonacci(int n) { int[] arr =new int[40]; arr[0]=0; arr[1]=1; if(n==0) {原创 2017-05-02 18:27:37 · 235 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 public int jumpFloor(int number) { // write code here int a = 1; int b = 2; int c = 0; // wri原创 2017-05-03 09:45:09 · 201 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution { public int jumpFloorII(int number) { // write code here int sum = 1; if (number==1) {原创 2017-05-03 10:01:49 · 170 阅读 · 0 评论 -
矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?依旧是斐波那契数列 2*n的大矩形,和n个2*1的小矩形 其中number*2为大矩阵的大小 有以下几种情形: number <= 0 大矩形为<= 2*0,直接return 1; number = 1大矩形为2*1,只有一种摆放方法,return1; numb原创 2017-05-03 10:20:26 · 216 阅读 · 0 评论 -
二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 public int NumberOf1(int n) { // write code here int count = 0; uint flag = 1; while(flag>=1) {原创 2017-05-03 11:38:25 · 221 阅读 · 0 评论 -
包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。using System.Collections.Generic; class Solution { public static Stack<int> stack2 = new Stack<int>(); public static Stack<int> stack1 = new Stack<int>();原创 2017-05-11 15:06:53 · 199 阅读 · 0 评论