/************************************************************************* > File Name: 41_ReverseWords.c > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年09月04日 星期日 16时18分34秒 *********************************************…
剑指 Offer 58 - I. 翻转单词顺序 Offer_58_1 题目描述 方法一:使用Split函数 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/12 17:38 */ import java.util.Arrays; /** * 题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. * 为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a studen…
题目 剑指 Offer 58 - I. 翻转单词顺序 思路1 假如题目要求我们翻转字符串,那么我们可以从末尾往前开始遍历每一个字符,同时将每一个字符添加到临时空间,最后输出临时空间的数据就完成翻转了,这就是倒叙遍历字符串,即从最末尾开始遍历.但是这一题又有些不同,题目要求是以单词为单位进行翻转字符串,所以我们使用双指针来找到一个完整的单词,剩下的步骤基本和上面的一样了,将单词按顺序存到临时的空间,最后输出即可. 代码 class Solution { public String reverseW…
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意…
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这个数,然后把它后面的数字都往前面移动一位,这样最后空出一位放该偶数即可.但显然这样会重复移动很多次.时间复杂的O(n^2) 2.在前后安排两个哨兵i,j,前面的用来指示偶数(即扫描如果是奇数就往后走),后面的用来指示奇数(遇到偶数就往前面走),当i扫描到偶数而j扫描到奇数时,我们就将其交换.类似扫描…
题目来源:剑指offer 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思路: 数组类题目指导原则:除了极其傻瓜式的题目,大部分数组类的题目都要用到 “双索引“策略,只不过有的采用对撞指针,有的采用跟随指针. 我们随便举出一个数组的例子,才分析怎么做才比较合适:2 4 7 4 3 5 8  10 9: 那么此时,你会怎么做,当然了,我们当然是需要找出所有的奇数,…
[题目]输入“I am a student.”>>>“.tneduts a ma I”.>>输出:student. a am I package com.exe9.offer; /** * [题目]“I am a student.”>>>“.tneduts a ma I”.>>student. a am I * @author WGS * */ public class ReverseWordsInSentence { public void R…
/* 题目: 输入一个英文句子,翻转单词顺序,但单词内部顺序不变. */ /* 思路: 先翻转整个句子,再将每个单词分别翻转一次. */ #include<iostream> #include<cstring> #include<vector> #include<algorithm> #include<map> using namespace std; void verse(char* pBegin,char* pEnd){ while(pEnd…
本题 题目链接 题目描述 我的题解 方法一:库函数split() 要注意str.split()函数: 字符串str前有 n 个空格时,分割出来的字符串列表中会多出 n 个空字符串: 字符串str某两个字符串中有 n 个空格,分割出的字符串列表会多 n-1 个空字符串. 字符串str最后有空格,分割出的字符串列表里不会多出空字符串 split()的例子如下: 本题代码如下 public String reverseWords(String s) { if (s == null) return s;…
题目 1. 翻转单词 student. a am I 转换成 I am a student. 2. 字符串左旋 abba 1 转成 bbaa 总结 1. 先对每个单词旋转, 再整齐旋转 2. 先翻转一半, 再全部旋转 3. 这类似看过多次了, 考研数据结构部分算法题…
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. a am I”.后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”.Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 题目分析 没必要分析 不过要对js中的常用方法的内部代码有所了解,也就是要懂得如何去实现这些方法. 代码 function…
题目描述 输入一个链表,反转链表后,输出链表的所有元素.     思路: 法1:用栈,压栈出栈 法2:头插法(有递归非递归2中)   AC代码: /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NU…
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部奇数位于数组的前半部分.全部偶数位于数组的后半部分. 前后分的这个.,让我想起来高速排序.好吧,就用这个做. 考虑到了排序的可扩展性,这里的推断条件设置为接口. package com.aii.algorithm; public class ArrayAdjuster { public void adjust(int[] array, CallBack callBack) { if (array == null) { thr…
题目: 调整数组顺序使奇数位于偶数前面 热度指数:11843 时间限制:1秒 空间限制:32768K 本题知识点: 数组 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 在线提交网址: http://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?rp=1&ru=/activity/oj&…
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析 判断是否为奇数,统计奇数个数,然后新建数组,把所有奇数存进去数组前面,剩下的存进去数组后面. 代码 function reOrderArray(array) { // oddBegin主要是用作奇数的索引,oddCount是用作偶数的索引,newArray用来存储,以空间换时间,复杂度为O(n) let…
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思路 时间换空间的: 思想可以参考插入排序.时间复杂度为o(n^2),空间复杂度为o(1) class Solution { public: void reOrderArray(vector<int> &array) { int i,j; int tmp; for(i=0;i<array.siz…
一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l". 二.思路 使用LinkedHadshMap统计字符个数,详见代码注释 三.代码 import java.util.LinkedHashMap; import java.util.Map; import java.ut…
Question 输入一个链表,反转链表后,输出链表的所有元素. Solution 如果空间复杂度要求为O(1)的话,可以考虑用三个指针来进行反转 如果没有空间复杂度限制的话,可以考虑用一个栈,将节点全部push到栈用,然后再生成新的链表. Code /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public:…
时间限制:1秒 空间限制:32768K 热度指数:440624 本题知识点: 链表 题目描述 输入一个链表,反转链表后,输出新链表的表头. /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NUL…
  题目描述:   输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.   解题思路:   首先,如果不考虑奇数和奇数,偶数和偶数的相对位置,那么我们有一种双指针解法来求解,类似于快排,维护两个指针,第一个指针指向数组的第一个数字,第二个指针指向数组的最后一个数字.第一个指针向后移,第二个指针向前移,如果第一个指针指向偶数,第二个指针指向的是奇数,则交换着两个数字,接着继续移动直…
一.题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.输入描述 char *str :字符串 int length : 字符串的长度 三.牛客网提供的类框架 //length为牛客系统规定字符串输出的最大长度,固定为一个常数 class Solution { public: void replaceSpace(char *str,int length) { } };…
题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 分析: 我们可以初始化left和right分…
题目: 输入一个链表,反转链表后,输出新链表的表头. 分析: 可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点. 也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后将当前节点的next,指向当前节点的前一个节点,然后再将p和prev更新求解即可. 程序: C++ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead == nullptr) return nullpt…
1 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22.现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 2 思路和方法  类似于滑动窗口,初始…
1 题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 2 思路和方法 数值:1 2(1*2) 3(1*3) 4(2*2) 5 (1*5)       6(3*2) 8(4*2) 9(3*3) 10(5*2),……,可见1以后的丑数都是前面的丑数乘以2.3或者5. 因为丑数只包含质因子2,3,5,假设我们已经有n-1个丑数,按照顺序排列,且第n-1的丑数为…
题目描述 输入一个链表,反转链表后,输出新链表的表头. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = null; }*/ function ReverseList(pHead) { // write code here if (!pHead) return null let p = pHead let q = pHead.next let head = pHead head.next = null while (q) {…
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   方法1: 正常层次遍历,利用普通队列.逢奇数行(从0算起)就把该层结果逆序. class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { if(pRoot==nullptr){return {};} queue<TreeNode*>…
way1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 /*struct ListNode {     int val;     struct ListNode *next;     ListNode(int x) :             val(x), next(NULL) {     } };*…
没有判断数组长度,导致{1,3,2,5,4}输出结果是false是什么鬼??? ------------------------------------------------------------------------ 时间限制:1秒 空间限制:32768K 热度指数:163724 本题知识点: 字符串 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽…
def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while True: while not isOdd( data[ even ]) : even -= 1 while isOdd( data[ odd ]) : odd += 1 if odd >= even: break data[ even ], data[ odd ] = data[ odd ], data…