
算法
Catherine66666
不忘初心
展开
-
算法-一个数组,把数组中的奇数全部放到偶数前面
首先分析,如果在一个数组中操作,或造成大量数据交换和移动,且时间复杂度较高,因此采用牺牲空间来保时间复杂度的方法,定义一个新数组,对原数组进行遍历,如是奇数,则放进去,再遍历一次再依次将偶数放进去,怎么样,是不是很简单,下面呈上代码: public static int[] JiOuPaiXu(int[] a){ int len=a.length; int[...原创 2020-02-24 23:03:33 · 2080 阅读 · 0 评论 -
两个有序数组,合并为一个数组,合并后仍是有序的
对于此题,首先想到的是先合并,再进行排序,此方法可行,但时间复杂度依赖于排序算法,如用冒泡排序,时间复杂度为n²,如用快排,时间复杂度为nlogn。还有一种办法就先排序再合并,拿数组a中的数字依次和数组b中的数字一次作比较,大的一个放入新数组c中,索引后移一个,此方法只对数组遍历一遍,因此时间复杂度为n,此方法易出现索引越界的问题,因此需要做特殊处理,具体代码如下: public stat...原创 2020-02-23 19:34:54 · 1089 阅读 · 0 评论 -
网易面试题-判断字符串s1是否为字符串s2的重排子串
判断字符串s1是否为字符串s2的重排子串,如s1=“aabcd”,s2=“sdabcda”,由于s2的子串“abcda”重新排序后可以为aabcd,因此s1是s2的重排子串;如s1=“aabcd”,s2=sdabcdsa“”,s2中任意子串重排后均不能和s1一样,因此s1不是s2的重排子串。题意已经明白,下面就是具体的实现,由于找的是子串之间的关系,因此首先想到的是通过java的subStrin...原创 2020-02-23 15:56:59 · 1260 阅读 · 0 评论 -
头条面试题:52张去掉大小王扑克牌平均分给4人,每人13张牌,要求随机分配
本道题难点为随机分配,要做到随机,就必须进行洗牌,本题我们采用随机数进行洗牌,先将52张扑克牌放入数组中,产生0-51的随机数,将随机数索引处的牌与当前遍历索引的牌进行交换来进行洗牌,最后将牌发给4人,最后呈上代码: public static void main(String[] args) { String[] Pukepai=new String[52]; ...原创 2020-02-23 14:38:58 · 4963 阅读 · 1 评论 -
网易面试题:1-10000,数字转汉字,如输入21输出为:二十一
本算法采用的思想为首先利用hashmap将数字对应的单位,即“个十百千万”存入map作为value,之后取出所输入数字中的各位数字,与map中的单位进行拼接。当然中间包含特殊情况判断,如输入数字中间有一个0的情况,需要将单位置为零,输入数字中间有多于个0的情况,应当只保留一个零,最后如果输入数字最后几位都是零,需要去掉最后的零,如5600,输出应为五千六百,而不是五千六百零。话不多说,呈上代码:...原创 2020-02-23 14:10:51 · 420 阅读 · 0 评论 -
算法:一个字符串包含大写字母和小写字母,分别统计出每个字母出现的次数(大小写分开)
此算法中,若想要得到高效率的时间复杂度,可以通过定义一个大小为52的整型数组,包含26个小写字母和26个大写字母,分别统计每个字母出现的次数,然后遍历数组,输出每个字母出现的次数。 public static void CharCount(String str1) { int[] count = new int[52]; for(int i=0; i<str1....原创 2019-02-27 11:49:04 · 4504 阅读 · 0 评论 -
算法:去除字符串中的重复字符
对于字符串去重复,首先想到的就是遍历字符串,然后去除重复的字符,这样时间复杂度是O(n²),时间复杂度太高了,本文所介绍的是采用java的String的indexOf方法来达到字符串去重的目的,indexOf的功能是返回指定字符在此字符串中第一次出现处的索引: public static String QuChong(String str){ StringBuilder s...原创 2019-02-27 11:24:00 · 2171 阅读 · 1 评论 -
算法:一个人爬楼梯,可以一次爬一阶或者两阶,问n层楼梯有多少种爬法
这类算法题重在分析问题的解决办法,可以先不用着急下手写代码,可以先分析一下问题;如果只有一阶楼梯,那么很简单,只有1种方法;如果有两阶楼梯呢,要么一次一阶,要么一次两阶,2中方法;如果是三阶呢,要么一次一阶,要么先两阶后一阶,要么先一阶后两阶,唉,等等,是不是发现了什么,如果有三阶的话,那么最后一步怎么走是不是有两种,就是要么走一阶,要么走两阶,如果走一阶,前面还有两阶,入股走两阶,前面还有一阶,...原创 2019-02-26 17:33:12 · 12923 阅读 · 2 评论 -
链表的倒叙
链表是一种添加和删除快,查询慢的数据结构,因此链表如果要实现倒叙没有数组那么便捷,对于链表的倒叙,采取的方法是逐步后移,逐步反向的方法。话不多说,先呈上代码: public static listNode listReverse(listNode head){ listNode pre=null; listNode next; while (...原创 2019-02-26 16:29:26 · 666 阅读 · 0 评论 -
横向遍历二叉树,取出值,放在链表中
二叉树正常的遍历方式又前序遍历,中序遍历,后序遍历3种,这3种遍历方式用的也最多,然而在面试过程中经常会被问到二叉树的横向遍历(又叫层次遍历),许多人不免会被问住,其实横向遍历二叉树借助队列先进先出的特性的话是很容易实现的,话不多少,先呈上代码:首先需要先定义链表和树的结构:public class listNode { protected listNode next; pri...原创 2019-02-26 15:49:37 · 323 阅读 · 0 评论