题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:

对应每个测试案例,输出两个数,小的先输出。

解析:两个指针,p1指向数组首,p2指向数组尾,判断两指针数据累加和,每当累加合为S则存入vector<vector<int>>vv数组,并保存乘积最小的乘积以及数组下标,累加和小于S则右移p1,大于S则左移p2,直到p1=p2.这个方法把全部符合累加和为S的数据对都存储在了vector<vector<int>>vv数组中,需要的话能够从vector<vector<int>>vv数组中取得全部符合的数据对。

class Solution {
public:vector<int> FindNumbersWithSum(vector<int> array,int sum){vector< vector< int > > vv;vector< int > v;int length=array.size();if(length==0 || length==1)return v;vector <int>::iterator p1; vector <int>::iterator p2; p1=array.begin();p2=array.end()-1;int minMultiply=1000;//存放乘积最小值int indexMin=-1;//存放乘积最小值temp存放在vv里的下标int cnt=-1;while(*p1 < *p2){if(*p1 + *p2 == sum)//每求得一个存入vv里{cnt++;v.clear();v.push_back(*p1);v.push_back(*p2);vv.push_back(v);int multiply= *p1 * *p2;if(multiply < minMultiply)//乘积最小则存最小下标,替换最小乘积{minMultiply=multiply;indexMin=cnt;}p1++;}if(*p1 + *p2 < sum)//和小于sum则p1右移直到和大于或等于sump1++;  if(*p1 + *p2 > sum)//和大于sum则p2左移直到和小于或等于sump2--;}if(cnt != -1)//找到,赋值v=vv[indexMin];return v;}
};
题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

解析:仿照上一题定义两数:small和big,累加small到big,和为所求sum则把small到big之间的数存入数组,否则改变small与big的值
FindContinuousSequence1按开始数字从小到大的顺序存储
FindContinuousSequence2按开始数字从大到小的顺序存储
class Solution {
public:vector<vector<int> > FindContinuousSequence1(int sum) {vector< vector< int > > array;vector< int > v;int big = 2 ;int small = 1 ;int addSum = 0 ;while( small != sum / 2 + 1 ){addSum=0;for( int i = small ;i <= big ; i ++ ){addSum += i;}if( addSum > sum ){small++;if( big == small )break;continue;}if( addSum < sum ){big++;continue;}if( addSum == sum ){v.clear();for(int j = small ; j <= big ; j ++ ){v.push_back(j);}array.push_back(v);small++;big++;continue;}        }return array;}                                                                                                                                   vector<vector<int> > FindContinuousSequence2(int sum) {vector< vector< int > > array;vector< int > v;int big = sum / 2 + 1 ;int small = big-1 ;int addSum = 0 ;while( small > 0 ){addSum=0;for( int i = small ;i <= big ; i ++ ){addSum += i;}if( addSum > sum ){big--;if( big == small )small--;<span style="white-space:pre">   </span>    <span style="white-space:pre">    </span>continue;}if( addSum < sum ){small--;continue;}if( addSum == sum ){v.clear();for(int j = small ; j <= big ; j ++ ){v.push_back(j);}array.push_back(v);<span style="white-space:pre">      </span>small--;
<span style="white-space:pre">     </span>big--;continue;}        }return array;}
};
题目描述

JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

解析:先翻转每个字符,再逐个翻转每个单词
class Solution {
public:void reverse(char *start,char *end){if(start==NULL || end==NULL)return;char temp;while(start < end){temp = *start;*start = *end;*end = temp;start ++;end --;}}string ReverseSentence(string str) {string str1;str1=str;if(str1.size() == 0)return str1;int length=str1.size();char *start=&str1[0];char *end=&str1[length-1];reverse(start,end);start=end=&str1[0];while(*start != '\0'){while(*end != ' ' && *end != '\0')end++;end--;//翻转当前单词reverse(start,end);//移动到下个单词while(*start != ' ' && *start != '\0')start++;while(*end != ' ' && *end != '\0')end++;if(*start != '\0')//不是结尾,继续{start++;end++;}}return str1;}
};

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

解析:我们发现:左移n个字母 等价于 :1、把先前n个字母反转 2、把剩下的字母反转 3、最后把全部字母反转 。即三次reverse()函数

class Solution {
public:void reverse(char *start,char *end){if(start==NULL || end==NULL)return;char temp;while(start < end){temp = *start;*start = *end;*end = temp;start ++;end --;}}string LeftRotateString(string str, int n) {string str1;str1=str;if(str1.size() == 0 || n== 0)return str1;int length=str1.size();char *start = &str1[0];char *end = &str1[n-1];reverse(start,end);start=&str1[n];end=&str1[length-1];reverse(start,end);start=&str1[0];end=&str1[length-1];reverse(start,end);return str1;}
};

剑指offer 算法 (知识迁移能力2)相关推荐

  1. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  2. 道指mt4代码_剑指offer算法题052:正则表达式匹配

    小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法.考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offe ...

  3. 剑指offer算法题028:数组中出现次数超过一半的数字

    小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法.考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offe ...

  4. 剑指offer算法合集

    汇总:Android小白成长之路_知识体系汇总[持续更新中-] 简述 算法,不知道是多少程序猿的痛,对我而言也如此,因此今天开始记录那些刷过的算法题,其中最经典的莫过于剑指offer里的题目,精妙的解 ...

  5. 剑指offer算法题分析与整理(一)

    下面整理一下我在刷剑指offer时,自己做的和网上大神做的各种思路与答案,自己的代码是思路一,保证可以通过,网友的代码提供出处链接. 目录 1.数组中的逆序对 2.二维数组中的查找 3.顺时针打印矩阵 ...

  6. 剑指offer算法题分析与整理(二)

    下面整理一下我在刷剑指offer时,自己做的和网上大神做的各种思路与答案,自己的代码是思路一,保证可以通过,网友的代码提供出处链接. 目录 1.序列化二叉树 2.带记忆的DFS搜索 3.坐标数位和不大 ...

  7. LeetCode剑指offer算法备战春招-包含min函数的栈

    剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...

  8. 剑指offer 算法 (知识迁移能力)

    题目描述 统计一个数字在排序数组中出现的次数. 解析:采用二分查找,搜到数字后在其前后判断并计数 class Solution { public:int GetNumberOfK(vector< ...

  9. 剑指offer 算法 (抽象建模能力)

    题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S,输入n,打印出S的所有可能的值出现的概率. 解析:用两个数组来存储骰子点数的每一个总数出现的次数.在一个循环中,第一个数组中的第n个数字表 ...

最新文章

  1. mysql 权重搜索
  2. 《Android系统源代码情景分析》一书正在连载中
  3. MySQL数据库使用(二):配置、连接远端数据库
  4. Bootstrap 栅格 样式 组件 插件
  5. 【CyberSecurityLearning 51】渗透测试方法论+渗透测试流程
  6. python 录制web视频_Python django框架 web端视频加密的实例详解
  7. 光端机按照技术类型及接口种类是怎么分类的?
  8. 09-CNN手写数字识别
  9. CVE-2015-1642 POC
  10. 周末爬山之圈门-潭柘寺
  11. [VSCode] Ubuntu 16.04 安装/更新 vscode
  12. Hive去重最佳方法
  13. 恢复html的初始选定状态,jQuery实现点击旋转,再点击恢复初始状态动画效果示例...
  14. Bellman-Ford算法 - 有向图单源最短路径
  15. Jasperreports5.6支持PDF微软雅黑字体
  16. 电脑编程工作工资多少?
  17. python批量打印word文件
  18. stimulsoft mysql_StimulSoft——将炫酷的报表写入你的应用程序
  19. 地图配色及网络地图比较
  20. HTML插入一条竖线

热门文章

  1. QDir::toNativeSeparators的使用
  2. maven项目的pom.xml 标签的含义
  3. [POJ](3268)Silver Cow Party ---最短路径(图)
  4. 开通域名绑定DDNS
  5. 一个小的日常实践——距离阵列
  6. 泛型 与 实体类的相互转换
  7. 软件包 sun-java6-jdk 没有可供安装的候选者
  8. 【090723】动态调用webservice
  9. linux批量部署war工具,Linux批量部署工具Expect
  10. 西南大学网络教育学院计算机基础,西南大学网络与继续教育学院课程考试计算机基础【1056】...