![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
我是菜狗救救我
这个作者很懒,什么都没留下…
展开
-
剑指offer:最小的k个数的两种Java解决(冒泡排序与大根堆)
题目 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 方法1,改进后的冒泡排序(时间复杂度为O(n*k)) 问题分析 普通的冒泡排序使用了两层循环,第一层循环遍历了数组中所有的元素,第二层循环比较相邻的元素。如果第一个比第二个大,就交换他们两个。因此,我们并不需要得到所有数组元素的大小排序结果,我们只需要将外循环执行k次即可。 注意!!!冒泡排序每一次冒泡最大值(或最小值)都在数组最末端,每一次添加元素时,需要从数组末尾抽取,这时的元原创 2020-09-10 16:19:40 · 207 阅读 · 0 评论 -
Java实现字符串的排序以及全排列变形题目(求字符的所有组合、国际象棋8皇后问题)
题目要求 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 代码思路 1.首先考虑递归。例如输入字符串abcd,提取第一个字符a,交换bcd的位置;提取第一个字符b,交换acd的位置…以此类推。整个核心代码就是一手交换,难点在于确定每一步的“第一个元素”。 2.接着考虑如何去重与排序,由于Collcetion集合中提供了Set接口:存储无序的(不等于随机性,根据数据的hash原创 2020-09-02 14:32:01 · 581 阅读 · 0 评论