![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
Chen-Sh
好记性不如烂笔头
展开
-
剑指offer--二维数组中的查找 笔记
剑指Offer(一):二维数组中的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:数组有序-> 左到右递增;上到下递增;[[1 2 8 9][2 4 9 12][4 7 10 13][6 8 11 15]]选择...原创 2019-08-06 10:38:53 · 123 阅读 · 0 评论 -
剑指offer--合成两个排序的链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:1.遍历,递归判断;2.计算链表长度,循环判断;#include <iostream>#include<vector>using namespace std;/* 创建一个单链表 */struct ListNode{ int val; ...原创 2019-08-10 10:40:00 · 110 阅读 · 0 评论 -
剑指offer--替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路: 从字符串尾部开始复制和替换。#include<iostream>#include<string>using namespace std;int main(){ string s; ch...原创 2019-08-07 21:36:36 · 133 阅读 · 0 评论 -
剑指offer-- 反转链表
输入一个链表,反转链表后,输出新链表的表头。思路:定义3个指针,当前节点和前一节点交换;#include <iostream>#include<vector>using namespace std;/* 创建一个单链表 */struct ListNode{ int val; ListNode* next;};void createLis...原创 2019-08-09 21:46:45 · 267 阅读 · 0 评论 -
剑指offer--链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。思路:快慢指针#include <iostream>#include<vector>using namespace std;/* 创建一个单链表 */struct ListNode{ int val; ListNode* next;};void createList(ListNode* pHea...原创 2019-08-09 21:25:10 · 214 阅读 · 0 评论 -
剑指offer--从头到尾打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。#include <iostream>#include<vector>using namespace std;/* 创建一个单链表 */struct ListNode{ int val; ListNode* next;};void createList(ListNode* p...原创 2019-08-09 19:47:34 · 241 阅读 · 0 评论 -
剑指Offer---数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。思路:排序数组à递增数列?#include<iostream>#include<vector>using namespace std;int main(){ vector<int>arr; int r; cout<<"Input Ro...原创 2019-08-07 20:46:00 · 168 阅读 · 0 评论 -
剑指Offer--数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路:顺序扫描整个数组。没扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中含有n个数字。由于每个数字都要和O(n)这个数...原创 2019-08-07 15:38:34 · 133 阅读 · 0 评论 -
剑指Offer--把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:排序…对拼接后的字符串进行比较。排序规则如下:若ab > ba 则 a 大于 b, 若ab < ba 则 a 小于 b, 若ab = ba 则 a 等于 b;根据上述规则,我们需要先将...原创 2019-08-07 10:32:00 · 105 阅读 · 0 评论 -
剑指Offer--连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会...原创 2019-08-06 21:15:23 · 117 阅读 · 0 评论 -
剑指offer--左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!例如:输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab";第一步...原创 2019-08-08 17:04:00 · 134 阅读 · 0 评论 -
剑指Offer--数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:1.如果次数超过数组个数一半,中间那个元素一定是次数最多的元素;#include<iostream>#include<vector>#incl...原创 2019-08-06 17:20:13 · 105 阅读 · 0 评论 -
剑指Offer--调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:如果array[]%2 == 1 取余为1 则为奇数,array[]%2 == 0 为偶数;先将奇数push_back,在将偶数push_back;#include<iostream>#include&...原创 2019-08-06 14:36:50 · 158 阅读 · 0 评论 -
剑指Offer---第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路:建立哈希表#include<iostream>#include<string>#include<map>using namespace std;int main(){ ...原创 2019-08-08 15:06:28 · 97 阅读 · 0 评论 -
剑指offer--旋转数组的最小数字 笔记
<剑指offer>旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:1.本题是输出数组最小值 而非数组排序;则可以循环判断值得大...原创 2019-08-06 10:40:28 · 124 阅读 · 0 评论 -
剑指Offer--字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。利用递归,固定第一个字符,第一个字符和后序字符依次交换。#include<iostream>#inc...原创 2019-08-08 11:29:39 · 249 阅读 · 0 评论 -
剑指offer--数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:将数组对应的值交换到对应的位置;例如 2交换到第2个位置,3交换到第3个位置;如果该位置上有对应的值,则重复;1、判...原创 2019-08-10 22:07:23 · 141 阅读 · 0 评论