【寒假第一天】LeetCode刷题

一.选择题

1.

D

堆排序·有两种排序方法:

大堆排序-----根结点要大于他的左右子节点,但是左右子节点不需要比较大小。

小堆排序------根结点要小于他的左右子节点,但是左右子节点不需要比较大小。

【寒假第一天】LeetCode刷题_第1张图片

2.

B

25->13->12->9,这是25的全部左子树,确实是大堆排列。12,9分别是13的左右子树。

25->10->18是25的右子树,所以18要先和10比较,然后交换,18再和25比较,18<25,不进行交换。所以是比较2次。

3.

A
【寒假第一天】LeetCode刷题_第2张图片

二.编程题

1.有效的字母异位词

【寒假第一天】LeetCode刷题_第3张图片
分析这个题之前先了解一下啥是字母异味词。就是给你n个字母,你随便排序,你排序的这几种就是字母异味词。这个题就是反过来让你判断这几个排序用的n=个数是不是一样。
其实这个题的大致思路也很简单,ascll码值都知道吧,直接按照码表上的顺序进行排序,如果俩个字符串排序后的内容一样,就说明就是字母异味词。
这个要是这样用就没啥意思了。我们在用哈希表炫一个。先开一个Vector类型长度为26的哈希表(就是一个数组),初始值都默认是0,然后把s字符串映射上去,初始值+1,然后映射t上去,这次不是加了,而是映射上的都-1,到最后总结,如果每一位全部是原来的0,那么是s,t他俩就是异位词,只要有-1,1就不是异位词。
这里有两点需要注意:
1.为啥都是ch='a',‘a’在ascll中是97,但是我们开的空间是从0开始的,为了和我们开的0-25的空间序号对应,所以就-97(‘a’).
2.还有一个疑问是最后那个if中的判断,为啥要<0,有的人该问为啥不是!=0,s,t的长度是相同的,因为开头的if已经判断了,只要当两者全部相同才有可能为0,其他情况,s-t都是-1。结果是1的情况是两者不一样长。

当然了,也可以不先判断长度,最后那个条件就是!=0。看下面这个代码:

2.判断字符串的两半是否相似

【寒假第一天】LeetCode刷题_第4张图片

简单题我重拳出击:

第一种、先判断字符串s中的元音字母,判断出来后再判断元音在字符串的前半段还是后半段。

第二种、把字符串s平分成两段,各自判断自己的元音数,最后比较一下就行了。

注意:
为啥最后返回的是cnt1==cnt2?注意主函数的返回值类型是bool,如果两者相等,返回true,不相等返回false。
substr函数的作用是:复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度或者是指定长度超出了源字符串的长度,则子字符串将延续到源字符串的结尾。

你可能感兴趣的:(leetcode,算法,职场和发展)