![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程题
dingpiao190
这个作者很懒,什么都没留下…
展开
-
top k算法讲解
在实际工作中,我们时常会有寻找长度为n的数组中,排在前k的元素,对于top k的问题,最暴力的处理方式就是直接对数组进行排序,然后再去截取前多少个数字,从而达到自己的目的,这种算法的实现复杂度为O(nlogn),其实有O(n)的算法或者是O(nlogk)时间复杂度的算法。基于快排的top k算法如果我们了解快速排序算法的话,知道其原理是每次寻找一个数值,将数组中所有小于这个数的值放在其左侧,所有大原创 2017-06-22 15:28:55 · 14114 阅读 · 0 评论 -
【CVTE笔试题】数字分割
题目描述给定一个数字n,如654321,再给定一个值m,如48。 对数字n进行任意分割,6+5+4+3+2+1或者65+4+32+1。 使分割之后的和最接近m值。解题思路递归对n进行分割,退出的条件就是完成分割。public class Main { private int last = 0; private int sum = 0; private void fun(ch原创 2017-09-08 11:18:46 · 429 阅读 · 0 评论 -
Split Array Largest Sum
Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among these m suba原创 2017-09-04 22:27:16 · 263 阅读 · 0 评论 -
最长的单调自增子序列
解题思路 动态规划,dp[i]表示前i个数字。dp[i]=1; dp[i]=max(dp[1,2,3,…,i-1]+1 ) ,dp[i]>dp[1,2,3,…,i-1] dp[i]=max(dp[i],1) 这种实现是O(n*n)的时间复杂的,如果实现O(nlogn)的时间复杂度,可以维护每个递增序列,按照序列中当前最大值对所有序列进行排序,然后可以通过二分实现新数据的插入,同时维护一个变量原创 2017-08-20 11:17:58 · 229 阅读 · 0 评论 -
常用的排序算法及其适用场景
常用的排序算法及其适用场景1.介绍 常用的排序算法主要有冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序,桶排序等。 2.稳定性 其中冒泡排序,插入排序,是稳定的排序算法;选择排序,希尔排序,堆排序,归并排序,快速排序是不稳定的排序算法。 3.排序算法的实现 3.1冒泡排序 冒泡排序的时间复杂度为O(n*n),空间复杂度为O(1),在数据有序的时候时间复杂度可以达到O(原创 2017-05-24 10:43:59 · 13997 阅读 · 0 评论 -
判断一个数是否为质数
直接上代码public class IsPrimeNumber { public boolean isPrime(long num) { for (int j = 2; j <= Math.sqrt(num); j++) { if (num % j == 0) { return false; }原创 2017-08-04 17:39:31 · 318 阅读 · 0 评论 -
求两个数最大公约数的方法
直接上代码//greatest common divisorpublic class GCD { // 辗转相除法 public int getGcd1(int x, int y) { return (y == 0) ? x : getGcd1(y, x % y); } public int getGcd2(int x, int y) {原创 2017-08-04 17:35:28 · 282 阅读 · 0 评论 -
二叉树非递归遍历方法
直接上代码import java.util.LinkedList;class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class erchashubianli { // 递归前序遍历 public原创 2017-08-04 17:37:28 · 218 阅读 · 0 评论 -
背包问题
背包问题目的是在有限的容量下求得可以获得的最大值,状态转移方程为: // f[i,j] = Max{ f[i-1,j-Wi]+Vi( j >= Wi ), f[i-1,j] } 其中i表示前i种物品可供选择,j的意思是当前使用的背包容量为j,当有i种物品可供选择时,可以容纳的最大值为 背包容量为j时有i-1种物品可供选择的值,即f[i-1,j]有i-1个物品可供选择包容量为j减去第i和物品原创 2017-08-07 20:16:13 · 288 阅读 · 1 评论 -
【美图笔试题】蚂蚁爬杆
解题思路首先这个题目的样子输出有问题,最快不是4秒,是20秒。最快的时间:在杆左半部分的往左侧爬,在杆右半部分的往右爬,这样需要时间最久的那个蚂蚁就是最快时间,这样依次爬行不存在蚂蚁碰撞的问题。 最慢的时间:因为涉及到蚂蚁碰撞的问题,我们先分析蚂蚁碰撞的时候发生了什么。 当A和B碰撞的时候分别原路返回,其实我们可以换个角度来看,B原路返回之后走的是原来A应该继续走的路线,A原路返回之后走的是原创 2017-09-07 21:51:03 · 1082 阅读 · 0 评论