算法
文章平均质量分 63
Coding101
每天进步一点点~
展开
-
【JS算法练习】彻底搞懂逆波兰表达式的求法,再复杂的表达式也不用慌~
前言表达式求值是校招面试/笔试中常考的一道算法题,即可以考察求职者的算法功底,又可以考察求值者思考问题的全面性。下面我们就来看看如何使用逆波兰表达式来求解各类复杂的表达式吧~问题描述:以字符串的形式给出表达式,请输出该表达式的求值结果。例如:输入:‘1+(12*3-4/2)-1’输出:34什么是逆波兰表达式?逆波兰表达式又称为后缀表达式,代表的含义是操作数在前,运算符在后。比如:1+2,用逆波兰表达式来写的话,就是12+.而1+2这种写法称为中缀表达式,即运算符在两个操作数之间,也是我们平原创 2022-04-23 13:19:13 · 2599 阅读 · 1 评论 -
一文彻底弄懂快速幂解法的核心
快速幂的核心在于底数最大化,指数最小化。这样做的目的是大大降低问题的时间复杂度,把原本需要4次的乘法运算转换为不需要进行乘法运算(指数是偶数),或者只需要进行一次乘法运算(指数是奇数)比如:3^4可以转换为9^2,再进一步可以转换为81^1.3^5可以转换为(9^2)*(3^1),再进一步可以转换为(81^1)*(3^1).从而做到底数最大化,指数最小化。其核心伪代码可表示为:if(指数&1){ // 代表指数是奇数 指数=指数 - 1;}while(指数原创 2022-01-24 20:54:01 · 235 阅读 · 0 评论 -
LeetCode34题:在排序数组中查找元素的第一个和最后一个位置
问题描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?样例:示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]...原创 2021-12-23 23:00:37 · 132 阅读 · 0 评论 -
棋盘覆盖问题的递归写法(Java)
package easy;import java.util.Scanner;public class 棋盘覆盖问题{ // 定义棋盘的大小:2^k,需要的骨牌数是:(4^k-1)/3 private static int BOARD_SIZE = 8; // 定义一个二维数组用来模拟棋盘 private static int[][] board = new int[BOARD_SIZE][BOARD_SIZE]; // 定义一个全局变量,用来记录骨牌的编号.原创 2020-10-24 21:51:54 · 252 阅读 · 0 评论 -
java测试程序时间复杂度
之前做算法题就是提交到算法相关平台上查看运行结果和时间复杂度,这样测试的缺点是:只能测试算法平台给出的算法题目,如果想测试自己的随便一段代码就走不通了。但其实测试程序的时间复杂度很简单,只需要在想测试程序的开始和结尾处加上开始时间和结束时间,然后打印两者的差值,就可以知道测试段程序的时间复杂度了。一般测试都用ms(毫秒)为单位,但是数据量很小看不出ms的变化时,可以用ns(纳秒)public static void main(String[] args) { long star原创 2020-10-11 11:10:57 · 831 阅读 · 0 评论 -
类型为map的集合如何获取元素?List<map>获取值的方法
List<map>其实就是类型map(键值对)的集合,只不过相比于string和Int格式获取数据来说相对麻烦一些,因为map的元素格式为键值对的,因此直接获取List<map>.get(i)拿到的是一个键值对:{key=value}如果我们只想要value的话按照map获取key或value就可以拿到啦,即使用get("key")...原创 2020-03-24 16:47:18 · 5150 阅读 · 0 评论 -
希尔排序--简单易懂图解
图解算法---希尔排序在网上看到一篇写的很不错的希尔排序讲解,我转发一下帮助更多的同学学习一下。如果侵权我会删除的。转载自:https://blog.csdn.net/qq_39207948/article/details/80006224前情回顾:直接插入排序(对插入排序不熟悉的建议先阅读此文)一天,一尘拿着扑克自己在那玩,刚被师傅看见了首先它把较大...转载 2019-09-26 21:19:34 · 3694 阅读 · 0 评论 -
高精度计算(java)
import java.math.BigDecimal;import java.text.DecimalFormat;import java.util.Scanner;public class p1601 { private static final int DEF_DIV_SCALE = 10; //高精度加减乘除 public static void mai...原创 2019-04-14 16:30:22 · 382 阅读 · 0 评论 -
背包问题模板(Java实现)
situation01:简单背包:package beibao;import java.util.Scanner;/** 有n件物品和容量为m的背包 给出i件物品的重量以及价值 求解让装入背包的物品重量不超过背包容量 且价值最大特点 但它的特点是每个物品只能选用一次* */public class situation01 { //01背包 public st...原创 2019-04-14 16:28:58 · 657 阅读 · 0 评论 -
二叉树的深度优先搜索和广度优先搜索(java实现)
package suanfaTest.TreeNode;public class TreeNode { int data; //左子树 TreeNode leftNode; //右子树 TreeNode rightNode; public TreeNode() { } public TreeNode(int data) {...原创 2019-04-14 16:23:34 · 752 阅读 · 0 评论 -
表达式求值(java实现)
package suanfaTest;import java.util.Stack;public class biaodashiTest02 { public String insetString(String expression){ String reslut = ""; for (int i = 0; i<expression.leng...原创 2019-04-14 16:21:12 · 1107 阅读 · 0 评论 -
快速排序(java实现)
import java.util.Arrays;import java.util.Scanner;public class quickSort { public static void sort(int[] a,int low,int hight){ int i,j,index; if (low>hight){ retu...原创 2019-04-14 16:18:43 · 462 阅读 · 1 评论 -
堆排序(java实现)
public class heapSort01 { //构建大根堆:将array看成完全二叉树的顺序存储结构 private int[] buildMaxHeap(int[] array){ //从最后一个节点array.length-1的父节点(array.length-1-1)/2开始,直到根节点0,反复调整堆 for(int i=(array...原创 2019-04-14 16:16:58 · 169 阅读 · 0 评论 -
第九届蓝桥杯省赛第八题(java)
/*标题:日志统计小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id 表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。 具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意...原创 2019-04-14 16:14:35 · 454 阅读 · 0 评论 -
KMP算法(java实现)
next数组的求解:求next数组的方法与这位大佬一样,感兴趣的同学自己去看吧。--->next数组的求解过程代码实现:直接上根据这个方法我写的kmp package suanfaTest;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class ...原创 2019-02-19 16:09:03 · 544 阅读 · 0 评论 -
拉格朗日插值算法(附c++源码)
C++程序实现Lagrange插值公式 Lagrange插值公式,是属于数值分析方面的内容,关于其应用,在这里就不多说。此处我想用C语言程序来实现n各插值节点插值公式的求解,并求出在某一个插值节点对应的函数值。 对于Lagrange插值算法的基本思想,在这里我只想略提两点,一个是拉格朗日插值公式,一个是拉格朗日插值基函数的求解。因为这两者才是算法需要解决的最根本的问题。 (1)采用插...转载 2018-05-10 21:49:01 · 17277 阅读 · 3 评论 -
java中容器vector的使用和存取
在java中vector容器相当于c++的动态数组,Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是...原创 2018-03-27 10:24:16 · 8445 阅读 · 2 评论 -
每天一道算法题—Day 2
题目:求整数的二进制数及其中1的个数解题思路:首先要求出二进制的每一位,通过除二取余法判断余数是1还是0,再将所有求出的余数放到一个容器里,最后反向输出就好了。设置一个计数器,每当余数为1时,计数器个数加一,最后打印出计数器的数字,即为该二进制中1的个数。代码:#include#includeusing namespace std;void main(){原创 2018-01-31 22:39:37 · 166 阅读 · 0 评论 -
每天一道算法题—Day 1
转载自http://blog.csdn.net/qianhen123/article/details/45641875题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。方法1:使用函数指针。[cpp] view plain copy转载 2018-01-29 18:28:42 · 227 阅读 · 0 评论