剑指offer
Summit_Cron
这个作者很懒,什么都没留下…
展开
-
剑指offer 翻转单词顺序列
最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? String.trim() 去掉首尾的...原创 2019-10-30 15:43:10 · 120 阅读 · 0 评论 -
剑指offer 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列。序...原创 2019-10-21 18:11:58 · 92 阅读 · 0 评论 -
剑指offer 和为S的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 思路:双指针,从前往后扫和从后往前扫,如果和小于sum证明小指针应该增加,如果和大于sum证明大指针应该减小。 import java.util.ArrayList; public class Solution { public ArrayList<Int...原创 2019-10-09 23:05:55 · 81 阅读 · 0 评论 -
剑指offer 两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点。 思路:单链表,第一个公共节点后的子链必是一致的,所以先将两个链从前截取长度一致,再一起遍历即可。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ ...原创 2019-09-29 15:58:45 · 97 阅读 · 0 评论 -
剑指offer 第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 思路:用图,遍历,碰到key就value++,再遍历一次,第一个遇到value等于一的就是第一个只出现一次的字符。 mp.containsKey 判断是否有这个key import java.util.*; public cl...原创 2019-09-29 11:39:03 · 79 阅读 · 0 评论 -
剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)
求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路:别问,问就暴力 public class Solution { publi...原创 2019-09-26 16:18:03 · 88 阅读 · 0 评论 -
剑指offer 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 借用大佬的思想: 采用阵地攻守的思想: 第一个数字作为第一个士兵,守阵地;count = 1; 遇到相同元素,count++; 遇到不相同元素,即为敌人,同归于尽,count–;...原创 2019-09-26 11:40:25 · 65 阅读 · 0 评论 -
剑指offer 从上往下打印出二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 借用大佬的思想,用arraylist模拟queue。入队列的顺序其实就是打印二叉树的顺序。 remove(0)为取出队列首个。 import java.util.*; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode righ...原创 2019-09-25 18:18:33 · 96 阅读 · 0 评论 -
剑指offer 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路:模拟栈,按照序列push,如果中途碰到输出序列的第一位,就pop出去,最后看栈内按照他的序...原创 2019-09-25 17:51:23 · 111 阅读 · 0 评论 -
剑指offer 用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:队列是先进先出,所以两个栈负负得正,先push进栈1中,栈1pop再push到栈2中,栈2的pop就是队列的顺序了。但是题目不是一整个队列直接进入,所以思路为把1当做反序,2当做正序,如果需要push进来,先把所有元素反序放到栈1中,在push。同理如果需要pop,就把所有元素调整成正序在栈2再pop,已A...原创 2019-09-25 14:53:56 · 99 阅读 · 0 评论 -
剑指offer 合并两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { ...原创 2019-09-15 20:59:18 · 131 阅读 · 0 评论 -
剑指offer 反转链表
输入一个链表,反转链表后,输出新链表的表头。 head当前,pre前一个,next后一个。 画图即可 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { ...原创 2019-09-15 19:43:40 · 83 阅读 · 0 评论 -
剑指offer 链表中倒数第k个结点 两种思路
输入一个链表,输出该链表中倒数第k个结点。 思路1:首先想到的是栈,先进后出,将链表全部压入栈,倒数第k个就是从栈中第k个出来的。已AC /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ import...原创 2019-09-15 15:46:26 · 85 阅读 · 0 评论 -
剑指offer 跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 其实就是一个菲波那切数列 public class Solution { public int JumpFloor(int target) { if(target==1) return 1; else if(ta...原创 2019-09-15 10:58:29 · 106 阅读 · 0 评论 -
剑指offer 从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路: 链表都是从前到后 于是想到栈 先进后出可以实现倒序输出 listNode.val 现在的数值。 listNode.next stack.push()栈的进入 stack.pop()出 stack.empty()判断为空 /** * public class ListNode { * int val; * ...原创 2019-09-14 21:14:40 · 65 阅读 · 0 评论 -
剑指offer 二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 直接找肯定超时啦,所以得想一些节约时间的办法,这里的话因为每一列从上到下都增大,每一行从右到左都减少,所以从右上开始,判断如果数组得数比target大,就往左走,小也亦然,注意下标不要越界,以AC ...原创 2019-09-14 20:42:27 · 91 阅读 · 0 评论