5 优化时间和空间效率
29 数组中出现次数超过⼀半的数字¶
数组中有⼀个数字出现的次数超过数组长度的⼀半,请找出这个数字。例如输⼊⼀个长度为9的数组 {1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的⼀半,因此输出2。
30 最⼩的k个数¶
输⼊n个整数,找出其中最⼩的k个数。例如输⼊4、 5、1、6、2、7、3、8这8个数字,则最⼩的4个数字是1、2、3、 4。
见LeetCode 215. Kth Largest Element in an Array。
31 连续⼦数组的最⼤和¶
输⼊⼀个整型数组,数组⾥有正数也有负数。数组中 ⼀个或连续的多个整数组成⼀个⼦数组。求所有⼦数组的和的最⼤值。要求时间复杂度为O(n)。
见LeetCode 53. Maximum Subarray。
32 从1到n整数中1出现的次数¶
输⼊⼀个整数n,求从1到n这n个整数的⼗进制表⽰中1出现的次数。例如输⼊12,从1到12这些整数中包含1的数字有1,10,11和12,1⼀共出现了5次。
见LeetCode 233. Number of Digit One。
33 把数组排成最⼩的数¶
题⽬:输⼊⼀个正整数数组,把数组⾥所有数字拼接起来排成⼀个数,打印能拼接出的所有数字中最⼩的⼀个。例如输⼊数组{3, 32, 321},则打印出这3个数字能排成的最⼩数字321323。
与179. Largest Number类似,只不过把最大改成了最小。
34 丑数¶
题⽬:我们把只包含因⼦2、3和5的数称作丑数(Ugly Number)。求按从⼩到⼤的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因⼦7。习惯上我们把1当做第⼀个丑数。
35 第⼀个只出现⼀次的字符¶
在字符串中找出第⼀个只出现⼀次的字符。如输 ⼊"abaccdeff",则输出'b'。
见LeetCode 387. First Unique Character in a String
36 数组中的逆序对¶
在数组中的两个数字如果前⾯⼀个数字⼤于后⾯的数字,则这两个数字组成⼀个逆序对。输⼊⼀个数组,求出这个数组中的逆序对的总数。
37:两个链表的第⼀个公共结点¶
输⼊两个链表,找出它们的第⼀个公共结点。