数据结构与算法
sunjiaminaini
三年android工作经验
就职于中国最大外卖平台-饿了么
熟练android,java开发。
展开
-
圆圈中最后剩下的数字(约瑟夫环问题)
题目大致为: 0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。从m+1个数重新开始,求出这个圆圈里剩下的最后一个数字。 思路: 第一种办法就是通过环形链表模拟这样的删除过程; Java代码package com.sun.jojo.datastructure;/** * Author sunjiamin * Date 2017/8/1原创 2017-08-16 16:54:26 · 942 阅读 · 0 评论 -
丑数
题目大致为: 丑数的定义为:只包含因子2,3和5的数。求按从小到大的顺序的第1500个丑数。约定:1当做第一个丑数。 思路: 设置三个指针分别代表该位置2,*3和*5,并将这三个数中的最小值插入数组中,若当前位置的值对应的因子<=刚插入的值,便将该指针后移,直到新的位置上的值*对应的因子>刚插入的值。 Java实现:package com.sun.jojo.datastruc原创 2017-08-17 18:58:41 · 770 阅读 · 0 评论 -
第一个只出现一次的字符
题目大致为: 在字符串中找出第一个只出现一次的字符。 思路: 在Java中可以把字符串转换成字符数组处理,可以使用HashMap的数据结构存储,其中key为字符,value为对应出现的次数,这样通过两次遍历字符数组就可以找出,其中,第一次是构建HashMap,第二次是对每个字符判断其HashMap中对应的value的值是否为1。 java:package com.su原创 2017-08-17 18:56:16 · 754 阅读 · 0 评论 -
两个链表的第一个公共结点
题目大致为: 输入两个链表,找出它们的第一个公共结点。 思路: 第一个公共结点开始往后都是公共结点,所以在末尾向前遍历,就可以找到第一个公共结点。利用上面的思想,可以先计算两个链表的长度,计算两个链表的长度差,然后先遍历较长的链表,等到剩余长度相等时开始同时遍历,这样就能较快地找到相同的结点,时间复杂度为O(m+n),其中m,n分别为两个链表的长度。package com.sun.jo原创 2017-08-15 15:51:22 · 819 阅读 · 0 评论 -
最小的k个数
题目大致为: 输入n个整数,找出其中最小的k个数。 思路: 使用类似二叉查找树的形式实现,控制好树中的结点个数为k。 Java代码package com.sun.jojo.datastructure;import java.util.Iterator; import java.util.TreeSet;/** * Author sunjiamin * Date 2017/原创 2017-08-15 16:21:10 · 933 阅读 · 1 评论