`
exceptionhelp
  • 浏览: 45178 次
社区版块
存档分类
最新评论
文章列表
今天分享一个"将一个整数的每位数分解并按逆序输出"。这个问题我们可以有两种解法,一种是递归,一种是非递归。我们先来说说递归解法。 这里面我们回用到两个运算符,%和/。/是求商,%取余。 递归:首先找递归的出口,我们这个出口是当n的绝对值小于10的时候我们把它放进一个list中然后函数返回。因为整数包括负整数,我们这里会取绝对值。接下来我们找递归方程,如果我们输入的数是123.那么我们应该递归123/10。在递归前我们要存储123%10,也就时存储他的个位数。具体代码如下: public void nxCQ(int n) { if (n < 0) { n = M ...
昨天我们说了寻找最大的K个数常规的两种解法,一种使用快速排序,另外一种是部分排序。今天我们介绍一种优化解法, 思想如下:在数组arr中我们进行一趟快速排序,选定key,把数组分为两部分a1,和a2。a1中的元素大于等于key,a2中的元素小于key。这样的话就会有两种可能,第一:a1中的元素个数小于K,所以a1中的元素加上K-a1.length个元素就是数组arr中最大的K个数。第二:a1中的元素个数大于或等于K,则返回a1中最大的K个数。这样不断递归就可以决绝这个问题。 先说说,一次快速排序。我们需要返回两个数组a1,a2,但是java不支持多参返回,所以我们用二维数组做为返回参数。具体代码如 ...
package com.mianshi.test; import java.util.ArrayList; import java.util.List; //需求:给出两个已经排序的数组,求两个数组的交集 //思路:取两个数组的交集,最直接的办法就是建两个for循环,遍历两个数组一个一个进行对照,若等就记录下来。但是这种办法效率比较低,给出的数组 //已经是排好序的所以我们可以使用二分查找,这样效率就会大大提高。还有一个地方,因为事先不知道有多少交集,即新数组的长度不确定,所以我们要 //借助List<Integer>集合。先把交集存在list中,之后再存入数组。如果数组比较大, ...
寻找最大的K个数,这个是面试中比较常见的一道题,网上也有很多例子,在这里先写一些比较传统的解法,以后会更新到比较好的算法。 这个题拿到之后首先会想到排序,排好序之后在选取选取最大的K个数。排序选择快速排序是个比较好的选择。 好了,让我们来进行第一个解法:快速排序 代码如下 public static void quickSort(int[] arr, int start, int end) { if (start < end) { int key = arr[start]; int right = start; int left = end; while (ri ...
编程实现矩阵,输入参数打印出相应维数的矩阵,如输入4,打印的矩阵为:     0 0 0 0     0 1 1 1     0 1 2 2     0 1 2 3 解题思路:刚拿到这个题的时候脑袋全是乱麻,想想但是怎么就没有好好学习线性代数,当时要是学好了 ...
选择排序,简单的说就是,每次遍历数列,取出最大或最小的值放在已排好序数列的最后。 最简单的就是在排序方法内部新建一个和原数组大小一样的空数组,这样每次遍历之后把最大或最小值放在对应的空数组中,代码如下: public static int[] selectSort1(int[] arr) { if (arr == null || arr.length == 0) { return null; } int[] newArr = new int[arr.length]; int minNum = Integer.MIN_VALUE; for (int i=0; i<a ...
Global site tag (gtag.js) - Google Analytics