剑指offer编程题
玄月九九重又一
这个作者很懒,什么都没留下…
展开
-
剑指offer编程题——翻转单词顺序列(翻转句子)
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路:这个问题,从例子上看,每...原创 2019-11-14 15:16:59 · 348 阅读 · 0 评论 -
剑指offer编程题——左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:对于一个字符串str,循环左移n位。那么首先判断,这个字符串真正左移的位数。当n的值大于字符串的长...原创 2019-11-14 14:40:52 · 272 阅读 · 0 评论 -
剑指offer编程题-输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路:首先想到的是,两个数相加之和是S,那么这两个数必定分布在sum/2的左右两边。此外,要求当有多对数字的和等于S,输出两个数的成绩最小的,那么就是输出最靠数组两端的数。证明:a< b,a+b=S,那么S=(a-m)+(b+m)=ab-(b-a)m-m*m...原创 2019-11-13 09:11:11 · 716 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数。
剑指offer-数组中只出现一次的数。前提:首先要知道异或运算和与运算的功能。对于两个数,如果相同,异或运算结果为0,不同异或为一。对于与运算,一个奇数,二进制尾数为一,偶数为零,那么偶数和一与运算,结果为0,奇数与一与运算,结果为1。解题思路:题目中提到,有两个数出现了一次,其他数都是出现两次。那么分析问题,根据上边提到的异或运算的功能,出现两次的数相互异或,最后肯定被抵消掉为零。如...原创 2019-11-09 13:41:46 · 195 阅读 · 0 评论 -
剑指offer 输入两个链表,找出它们的第一个公共结点。
题目描述输入两个链表,找出它们的第一个公共结点。思路方法一:使用HashMap来当做临时存储区,将一个链表放进去,然后使用HashMap的自带方法containsKey(),对第二个链表进行遍历,如果第二个链表中的节点在HashMap中,那么找到的就是第一个交叉点,具体代码如下。public ListNode FindFirstCommonNode(ListNode pHead1, Lis...原创 2019-11-06 09:22:24 · 283 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
剑指offer题解题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路:两次遍历,主要还是hash,利用每个字母的ASCII码作hash来作为数组的index。第一次遍历:首先用一个58长度的数组来存储每个字母出现的次数,为什么是58呢,主要是由于A-Z对应的ASCII码...原创 2019-11-04 14:08:50 · 761 阅读 · 0 评论 -
剑指offer-调整数组顺序使奇数位于偶数前面——Java解法
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解法一思路简介:要求数组中奇数在偶数前边,并且相对顺序不变,可能大家想到的是排序的稳定性,当然也有用插入排序解题的,但是咱们这里不用插入排序。使用两个list来分别存放数组中的奇数和偶数(list动态扩容,无需声明长度)...原创 2019-10-09 10:57:54 · 371 阅读 · 3 评论