- 博客(5)
- 收藏
- 关注
原创 【剑指Offer】数组中的逆序对
【题目】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007【思路】使用归并排序,在归并的过程中进行比较,复杂度O(nlogn)O(nlogn)O(nlogn)。【代码】public class Solution { private int sum = 0; public int InversePairs(int [] ar
2020-09-22 13:09:01 100
原创 【剑指Offer】第一个只出现一次的字符
【题目】在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)【代码】class Solution {public: int FirstNotRepeatingChar(string str) { int length = str.length(); if(length == 0) return -1; int a[25
2020-09-20 10:56:37 64
原创 【剑指Offer】丑数
【题目】把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【思路】根据丑数的定义, 丑数应该是另一个丑数乘以 2、3 或者 5 的结果(1 除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以 2、3 或者 5 得到的。这种思路的关键在于怎样确保数组里面的丑数是排好序的。假设数组中已经有若干个丑数排好序后存放在数组中,并且把己有最大的
2020-09-16 21:05:25 74
原创 【剑指Offer】把数组排成最小的值
【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。【思路】最直接的解法应该是先求这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最小值,n个数字总共有n!个排列。在这里我们自己定义一个规则,对拼接后的字符串进行比较。若ab > ba 则 a 大于 b,若ab < ba 则 a 小于 b,若ab = ba 则 a 等于 b;
2020-09-15 16:05:04 57
原创 【剑指Offer】两个链表的第一个公共结点
【题目】输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)【思路】方法一:我们可以把两个链表拼接起来,一个是pHead1在前pHead2在后,另一个是pHead2在前pHead1在后。这样,生成了两个相同长度的链表,那么我们只要同时遍历这两个表,就一定能找到公共结点。方法二:我们也可以先让把长的链表的头砍掉,让两个链表长度相同,这样,同时遍历也能找到公共结点。【代码】方法一(C++)/*struct List
2020-09-14 20:15:58 59
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人