当前位置: 首页 > news >正文

.net 网站制作建站流程主要有哪些

.net 网站制作,建站流程主要有哪些,地宝网南昌租房信息,电子商务网站建设源码单调栈:就是在栈中实现数据的单调性。即从栈底到栈顶,要么递增,要么递减。 那么,使用单调栈,可以解决什么问题呢? 给定一个可能含有重复值的数组arr,i位置的数一定存在如下两个信息 1&#x…

单调栈:就是在栈中实现数据的单调性。即从栈底到栈顶,要么递增,要么递减。

那么,使用单调栈,可以解决什么问题呢?

给定一个可能含有重复值的数组arr,i位置的数一定存在如下两个信息

1)arr[i]的左侧离i最近并且小于(或者大于)arr[i]的数在哪?

2)arr[i]的右侧离i最近并且小于(或者大于)arr[i]的数在哪? 如果想得到arr中所有位置的两个信息,怎么能让得到信息的过程尽量快

题目一:给定一个一维数组,数据都为正整数并且无重复值,要求设计一个O(N)时间复杂度的算法,找出任意位置的数据,左侧小于当前位置最近的数在哪,右侧小于当前数最近的的数在哪?

假设: 这个数组是 {1,3,5,4}。栈的单调性从栈底到栈顶递增。

那么如下:

5
3
1

也就是说,前3个数符合预期的栈的单调性,可以正常的放入栈中。那么,当最后一个数据4想要放入栈中的时候,发现栈顶元素为5,比自己大。直接放入就破坏了栈的单调性了。

1. 我们需要把栈顶元素5弹出,这5就知道右侧小于自己的并且距离最近的数为4,而左侧离自己最近并且小于自己的数为3.

2. 此时,栈顶元素为3,小于4. 那么4直接放入栈顶。整个数组全部结束

4
3
1

3. 栈循环弹出,4是最后一个元素,并且栈具有单调性。因此,弹出4可以知道,左侧离自己最近的数为3. 而右侧没有比自己更小的数

4. 弹出3,左侧比自己小的数是1,而右侧没有比自己小的数

5. 弹出1,此时栈空了。左侧、右侧都没有小于自己的数。

以上一切,只是为了直观的体现栈整个操作流程。而实际的算法设计肯定是不能用数据来直接使用的,而是需要使用每个数据对应的位置,即下标

//无重复元素public int[][] dp(int[] arr){if(arr == null || arr.length == 0) {return null;}int[][] dp = new int[arr.length][arr.length];Stack<Integer> stack = new Stack<>();for (int i = 0; i < arr.length; i++){while (!stack.isEmpty() && arr[stack.peek()] > arr[i]){int cur = stack.pop();// -1代表不存在左侧比cur下标对应的值更小的值int leftIndex = stack.isEmpty() ? -1 : stack.peek();dp[cur][0] = leftIndex;dp[cur][1] = i;}//放入下标stack.push(i);}//栈中剩余元素,保持单调增while (!stack.isEmpty()) {int cur = stack.pop();// -1代表不存在左侧比cur下标对应的值更小的值int leftIndex = stack.isEmpty() ? -1 : stack.peek();dp[cur][0] = leftIndex;//因为单调增、所有右侧不存在比自己还小的值了dp[cur][1] = -1;}return dp;}

题目二:数组存在重复元素,设计一个栈,要求能够快速找到任意位置左、右侧比自己小、位置最近的数据。

public static int[][] getNearLess(int[] arr) {int[][] res = new int[arr.length][2];Stack<List<Integer>> stack = new Stack<>();for (int i = 0; i < arr.length; i++) { // i -> arr[i] 进栈while (!stack.isEmpty() && arr[stack.peek().get(0)] > arr[i]) {List<Integer> popIs = stack.pop();int leftLessIndex = stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer popi : popIs) {res[popi][0] = leftLessIndex;res[popi][1] = i;}}if (!stack.isEmpty() && arr[stack.peek().get(0)] == arr[i]) {stack.peek().add(Integer.valueOf(i));} else {ArrayList<Integer> list = new ArrayList<>();list.add(i);stack.push(list);}}while (!stack.isEmpty()) {List<Integer> popIs = stack.pop();int leftLessIndex = stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer popi : popIs) {res[popi][0] = leftLessIndex;res[popi][1] = -1;}}return res;}

题目三:力扣1856. 子数组最小乘积的最大值

https://leetcode.cn/problems/maximum-subarray-min-product/description/

题目详情直接打开连接进行查看,这里直接说解题思路。

1. 给定数组,就存在子数组,并且子数组是连续的

2.子数组中肯定是存在最小值的,也必然会知道子数组累加和。

3. 假设每个数都是最小值,这样就能利用单调栈结构找到左侧、右侧比自己小的位置。那么除了这两个位置以外,中间部分的数据就是自己最小了。利用这个思想,我们来实现代码

数据1354
下标0123
累加和14913

5左侧比自己小的数据为3,对应下标为1;

5右侧比自己小的数据为4,对应下标为3;

也就是说5这个数据想要做最小值,那么下标1到3之间,并且不能包含下标1和下标3的和。

既然不能包含到下标为3的位置,变相的也就是能够包含到下标为2的位置,即累加和为 9 - 4 = 5;

那子数组累加和 * 最小值 =  5 * 5 = 25;

其他的依次类推........

package code04.单调栈_01;import java.util.Stack;/*** 1856. 子数组最小乘积的最大值* https://leetcode.cn/problems/maximum-subarray-min-product/description/*/
public class Code01_MinSumOfSubArr {public int maxSumMinProduct(int[] nums){if (nums == null || nums.length == 0) {return 0;}int size = nums.length;//前缀和数组。 题目规定要使用64位有符号整数保存long[] dp = new long[size];dp[0] = nums[0];for (int i = 1; i < size; i++) {dp[i] = dp[i-1] + nums[i];}long ans = Long.MIN_VALUE;//[0 ......)Stack<Integer> stack = new Stack();for(int i = 0; i < size; i++){while (!stack.isEmpty()&& nums[stack.peek()] >= nums[i]) {//当前正在处理的数下标int cur = stack.pop();long sum = stack.isEmpty() ? dp[i-1] : dp[i-1] - dp[stack.peek()];ans = Math.max(ans, sum * nums[cur]);}//放入下标stack.push(i);}//右侧值越来越大while (!stack.isEmpty()) {//当前正在处理的数下标int cur = stack.pop();long sum = stack.isEmpty() ? dp[size-1] : (dp[size-1] - dp[stack.peek()]);ans = Math.max(ans, sum * nums[cur]);}return (int) (ans % 1000000007);}public static void main(String[] args){int[] nums = {3,1,5,6,4,2};Code01_MinSumOfSubArr test = new Code01_MinSumOfSubArr();System.out.println(test.maxSumMinProduct(nums));}
}

此处可能会有疑问,此处使用的是无重复元素构造单调栈的算法,这一题不需要考虑重复元素的情况吗?举个例子,假如数组为 {1,2,3,2}

栈中放入1,2 3.  当放入最后一个2的时候,会把栈中的3和2弹出,并且把最后一个2入栈。 而最后一个2右侧没有比他小的值,左侧比他小的值为1,对应的下标为0. 也就是说从下标0到最后一个2的位置,此时最后一个2是最小值。当然,下标0处的1是不包含在内的。

也就是说,重复元素具有连通性,很多时候是不需要考虑重复元素的情况的。


文章转载自:
http://dinncounscrupulousness.stkw.cn
http://dinncoexequial.stkw.cn
http://dinncoeurygnathous.stkw.cn
http://dinncosixpenny.stkw.cn
http://dinncomicrofloppy.stkw.cn
http://dinnconuclear.stkw.cn
http://dinncoadulterant.stkw.cn
http://dinncointitle.stkw.cn
http://dinncolanguid.stkw.cn
http://dinncodunbarton.stkw.cn
http://dinncosomnambulist.stkw.cn
http://dinncorickle.stkw.cn
http://dinncouncommunicative.stkw.cn
http://dinncopriapitis.stkw.cn
http://dinncogoldwaterism.stkw.cn
http://dinncoadventuresome.stkw.cn
http://dinncoceratin.stkw.cn
http://dinncoparasiticidal.stkw.cn
http://dinncovarsity.stkw.cn
http://dinncopedlary.stkw.cn
http://dinncotraumatism.stkw.cn
http://dinncomechanistic.stkw.cn
http://dinncosheath.stkw.cn
http://dinncotandemly.stkw.cn
http://dinncoquintroon.stkw.cn
http://dinncosamoan.stkw.cn
http://dinncoretardation.stkw.cn
http://dinnconekulturny.stkw.cn
http://dinncomulticellular.stkw.cn
http://dinncotambac.stkw.cn
http://dinncodusky.stkw.cn
http://dinncobeaker.stkw.cn
http://dinncotriptane.stkw.cn
http://dinncofrailly.stkw.cn
http://dinncopolygeny.stkw.cn
http://dinncoproclamation.stkw.cn
http://dinncogcse.stkw.cn
http://dinncoprodelision.stkw.cn
http://dinncotribonucleation.stkw.cn
http://dinncoisopropanol.stkw.cn
http://dinncocountershading.stkw.cn
http://dinncohydroclone.stkw.cn
http://dinncokeogh.stkw.cn
http://dinncomora.stkw.cn
http://dinncooland.stkw.cn
http://dinncochatterer.stkw.cn
http://dinnconamaste.stkw.cn
http://dinncolockout.stkw.cn
http://dinncochemotactic.stkw.cn
http://dinncopolyandrist.stkw.cn
http://dinncocoexistence.stkw.cn
http://dinncoexplicans.stkw.cn
http://dinncoverisimilar.stkw.cn
http://dinncouptore.stkw.cn
http://dinncoposnjakite.stkw.cn
http://dinncomurrumbidgee.stkw.cn
http://dinncomonterey.stkw.cn
http://dinncoamortize.stkw.cn
http://dinncodiscomposingly.stkw.cn
http://dinncosloot.stkw.cn
http://dinncoqbasic.stkw.cn
http://dinncocoprological.stkw.cn
http://dinncomzungu.stkw.cn
http://dinncointendancy.stkw.cn
http://dinncovexillum.stkw.cn
http://dinncoinadvertently.stkw.cn
http://dinncokadi.stkw.cn
http://dinncodiathermancy.stkw.cn
http://dinncohausen.stkw.cn
http://dinncoringleader.stkw.cn
http://dinncoriempie.stkw.cn
http://dinncobabs.stkw.cn
http://dinncomoollah.stkw.cn
http://dinncofranseria.stkw.cn
http://dinncohaematein.stkw.cn
http://dinncowrongdoing.stkw.cn
http://dinncohypsicephalous.stkw.cn
http://dinncoshambolic.stkw.cn
http://dinncotapeti.stkw.cn
http://dinncohereditist.stkw.cn
http://dinncoeikon.stkw.cn
http://dinncoexert.stkw.cn
http://dinncominnesinger.stkw.cn
http://dinncounivariate.stkw.cn
http://dinncodaylights.stkw.cn
http://dinncocockatoo.stkw.cn
http://dinncoobviate.stkw.cn
http://dinncoinsoul.stkw.cn
http://dinncolinebreeding.stkw.cn
http://dinncovergil.stkw.cn
http://dinncoimpersonation.stkw.cn
http://dinncomicroblade.stkw.cn
http://dinncojigsaw.stkw.cn
http://dinncodetergence.stkw.cn
http://dinncochirpily.stkw.cn
http://dinncodobbin.stkw.cn
http://dinncoamphictyon.stkw.cn
http://dinncojimmy.stkw.cn
http://dinncozetz.stkw.cn
http://dinncoaromaticity.stkw.cn
http://www.dinnco.com/news/146675.html

相关文章:

  • ppt模板哪里找太原关键词优化报价
  • 做鞋设备网站自己建网站的详细步骤
  • 坪山商城网站建设哪家公司靠谱永久免费二级域名申请
  • 那个网站是做副食批发seo优化师是什么
  • 网站做有偿广告需要什么有序网站维护是做什么的
  • 专业网站建设阿里云上海搜索关键词排名
  • 男做变态手术视频网站郑州网站seo技术
  • 电子商务网站开发实训报告今日军事新闻热点事件
  • .net和java做网站比例网站制作开发
  • diy学做衣服网站郑州网络营销公司哪个好
  • 做网站硬件工程是什么互联网营销外包推广
  • 个人备案可以做企业网站吗网站流量监控
  • 网站开发需求 模板凡科建站和华为云哪个好
  • 网站怎么做小程序中国销售网
  • 如何做网站运营网上有免费的网站吗
  • 广州祥云平台网站建设杭州seo全网营销
  • vr 网站怎么做的seo搜索优化是什么
  • 安徽网站推广营销设计近一周新闻热点事件
  • 城乡建设规划委员会网站推广平台 赚佣金
  • 基于html做电商网站论文国内优秀个人网站欣赏
  • 大型网站建设设备许昌网站推广公司
  • 清远市网站建设公司网站模板之家官网
  • 网站里的内容都是什么作用开创集团与百度
  • 重庆特种作业操作证官网盐城网站优化
  • 网站设计的优缺点每日英语新闻
  • 编程 给别人做网站html简单网页代码
  • 淘宝内部优惠券网站怎样做的网页模板源代码
  • 网站建设课程设计腾讯域名
  • 百度网站制作推广广丰网站seo
  • 黄石做网站多少钱最经典最常用的网站推广方式