算法笔记(C++|数据结构|牛客网)

1、把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

  思路:首先可以知道,比7小的数字,自身就是丑数,而习惯上我们把1当做是第一个丑数,所以当 N<7 的时候,第N个丑数就是N本身。

      当 N>=7 时,因为丑数为任意个2、3或7的积,则其为较小的丑数乘以2、3或7得到的新的丑数,我们从中取最小来依次排列。

  具体如下:


2、在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置。

  思路:这道题需要进行判断,第一层循环是为了确定一个比较的基数,从头到尾。

  第二层循环是为了比较,当i==j时,为同一个数,跳过;当str[i]==str[j]时,有重复的字母,flag设为FALSE,意为不符合条件。

  当flag为true时,符合条件返回。或者遍历到最后一个数时,返回最后一个数。

   具体如下:


   思路2:摘自牛客网

  标准的书本解法,先在hash表中统计各字母出现次数,第二次扫描直接访问hash表获得次数。

  链接:https://www.nowcoder.com/questionTerminal/1c82e8cf713b4bbeb2a5b31cf5b0417c

  具体如下:


3、输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。

  思路:递归思想。要复制整个链表,可以一个人一个结点的复制、拼接。

   具体做法:

原文地址:https://www.cnblogs.com/zhangxiaoshuang/p/6436225.html