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

LeetCode分类刷题-----贪心算法

贪心算法

    • 贪心
      • 455.分发饼干
      • 376.摆动序列
      • 53.最大子序和
      • 122.买卖股票的最佳时机||
      • 55.跳跃游戏
      • 45.跳跃游戏||
      • 1005.K次取反后最大化的数组和
      • 134.加油站
      • 135.分发糖果
      • 860.柠檬水找零
      • 406.根据身高重建队列
      • 452.用最少数量的箭引爆气球![在这里插入图片描述](https://img-blog.csdnimg.cn/38eddcd2b4c8452eaf1ed74f8504669e.png)
      • 435.无重叠区间
      • 763.划分字母区间
      • 56.合并区间
      • 738.单调递增的数字

贪心

455.分发饼干

在这里插入图片描述
思路:
要想总体上是最优解,那么局部上就要满足最优解,就要让尺寸大的饼干去让胃口大的孩子吃,而不能让尺寸很大的饼干去投喂胃口很小的孩子。,所以外层从后往前遍历孩子的胃口,内层去找满足的饼干数,这样下来就是最优解啦。

 public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int result=0;//喂饱的数量int index=s.length-1;//大饼干的最后位置。//要从孩子去遍历,找大饼干去满足for(int i=g.length-1;i>=0;i--) {if(index>=0&&s[index]>=g[i]) {//较大饼干满足较大孩子的胃口了result++;index--;}}return result;}

376.摆动序列

在这里插入图片描述
思路:
1.当只有两个元素时,两个元素不一样,算两个摆动(解决:默认result=1,然后不去遍历最后一个元素)
2.第一个元素也算一个摆动。(pre=0)
3.当出现平坡的时候也算摆动。(判断条件时要加上等于0的情况)

 public int wiggleMaxLength(int[] nums) {int result=1;//初始值为1,因为要把最后的端点算进去,这样就不用遍历它了int pre=0;//初始的坡度为0,因为要把第一个端点算上.int post=0;//后边的坡度for(int i=0;i<nums.length-1;i++) {post=nums[i+1]-nums[i];if(((pre>=0)&&(post<0))||((pre<=0)&&(post>0))) {//当满足坡度条件时result++;pre=post;//在if语句里边更新这个值是要防止单调平坡的情况,单调就是一直延一个方向走的情况,所以当方向改变的时候再去改变坡度的值。}}return result;}

53.最大子序和

在这里插入图片描述
思路:
如果前面的子序和是负数的话,那么就舍弃它从后边一位开始,因为不管后边是什么数,它都是拖后腿的。然后每次更新保存最大的值即可。

public static int maxSubArray(int[] nums) {int start=0;int end=0;int result=Integer.MIN_VALUE;//更新最大的结果int count=0;//当前的子序和for(int i=0;i<nums.length;i++) {count+=nums[i];if(count>result) {result=count;//更新最大值end=i;}if(count<0) {count=0;//当前子序和为负数,直接放弃这个,移动到下一步来更新start=i+1;}}System.out.println("start="+start);System.out.println("end="+end);return result;}

122.买卖股票的最佳时机||

在这里插入图片描述
思路:
从第二天开始卖,收集利润为正数的利润,就是最后最大的利润。
比如1 2 3 5 7.
最后利润是6,等同于第一天买入,最后一天卖出。

  public int maxProfit(int[] prices) {int result=0;for(int i=1;i<prices.length;i++) {result+=Math.max(0, prices[i]-prices[i-1]);}return result;}

55.跳跃游戏

在这里插入图片描述
思路:
每走一步,更新到当前步的最大覆盖范围,如果能覆盖到最后一个,那么就满足条件,否则,就不满足。能跳跃到的范围要保证在cover以内。

 public boolean canJump(int[] nums) {if(nums.length==1) {return true;}int cover=0;for(int i=0;i<=cover;i++) {cover=Math.max(cover, i+nums[i]);//保证cover处于最大值if(cover>=(nums.length-1)) {return true;}}return false;}

45.跳跃游戏||

在这里插入图片描述
思路:
这道题不是去算具体的步数,而是计算最少跳几次就可以了。
要把以前遍历到的最大覆盖范围记录下来。每次都往最大的范围跳。
例如2,1,3,5,8.
第一步能跳到3的位置,但是此时还不能跳完,再去更新此时能覆盖到的最大范围。然后到了8后面的一个位置。所以说,当i走到cur的位置,如果没有遍历完,再去更新最大的覆盖范围。而最大的覆盖范围肯定是当前步数再加一步能够的到的,无论你停在前边的哪一步。都能达到这个的最大范围。
总结:当遍历到你当前的节点时,就去更新最大范围。

 public int jump(int[] nums) {if(nums.length==1) {return 0;}int next=0;//代表覆盖的最大范围int cur=0;//代表当前能移动到的步数int result=0;for(int i=0;i<nums.length;i++) {next=Math.max(next,i+nums[i]);//每次更新能覆盖到的最大范围if(cur==i) {//遍历到当前能移动的最大值了,去更新nextif(cur<nums.length) {result++;//算移动了一步//去更新cur的值cur=next;if(cur>=nums.length-1) {break;}}else {break;}}}return result;}

1005.K次取反后最大化的数组和

在这里插入图片描述
思路:
这题有两个贪心策略,第一尽量将较小的负数取反,因为这样可以使结果更大。然后剩下的次数,用在绝对值最小的正数上,这样即使正数变成负数也会使代价最小。所以
先把数组按绝对值进行排序,然后把负数都变成正数。
最后看k有没有消耗完,如果没有消耗完,将绝对值最小的数改变符号即可。

 public int largestSumAfterKNegations(int[] nums, int k) {// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小nums = IntStream.of(nums).boxed().sorted((o1, o2) -> Math.abs(o2) - Math.abs(o1)).mapToInt(x->x).toArray();for(int i=0;i<nums.length;i++) {//当遇到负数,将负数越小的值进行取反if(k>0&&nums[i]<0) {nums[i]=-nums[i];k--;}}//当剩下的k还是奇数的时候,将绝对值最小的正数取反即可。if(k%2==1) {nums[nums.length-1]=-nums[nums.length-1];}return IntStream.of(nums).sum();}

134.加油站

在这里插入图片描述
思路:
求出每一站的净含量值,如果当前邮箱里边是负数,那么就从下一站开始。
如果邮箱总数都不能满足题意,那么直接返回-1.
为什么当前站邮箱为负数那以前的站点都不能满足呢。
可以把之前走过的站分为两个区间。
那么汽车走到这满足不了条件就代表区间1+区间2油量小于0。
如果从区间2开始走,区间2大于0的话。那么区间1肯定是小于0的,所以汽车根本不可能走到这。所以要从当前站点的下一站开始。

 public int canCompleteCircuit(int[] gas, int[] cost) {int start=0;//起始位置int totalSum=0;//总共的邮箱净值含量int curSum=0;//当前邮箱的含量。如果当前邮箱含量为负,那么就从下一站开始for(int i=0;i<gas.length;i++) {totalSum+=(gas[i]-cost[i]);curSum+=(gas[i]-cost[i]);if(curSum<0) {start=i+1;curSum=0;}}if(totalSum<0) {//如果总量油都不能满足,那么从任何地方开始都不能满足题意了return -1;}return start;}

135.分发糖果

在这里插入图片描述
思路:
从左向右遍历一遍,保证右边分数高的孩子比左边孩子的糖果多。
从右向左遍历一遍,保证左边分数比右边分数高的孩子糖果比右边的多,同时,此时也要满足比左边孩子多的条件。

 public int candy(int[] ratings) {int []candyi=new int[ratings.length];//存糖果的数组candyi[0]=1;//初始值为1//从左向右遍历去分配糖果for(int i=1;i<candyi.length;i++) {candyi[i]=ratings[i]>ratings[i-1]?candyi[i-1]+1:1;//保证右边分数高的孩子比左边的低一个,然后默认值是1}//从右往左遍历去分配糖果for(int i=candyi.length-2;i>=0;i--) {//如果左边的孩子比右边孩子大的话if(ratings[i]>ratings[i+1]) {candyi[i]=Math.max(candyi[i+1]+1, candyi[i]);//保证左右两边的条件都要满足}}int result=0;for(int i:candyi) {result+=i;}return result;}

860.柠檬水找零

在这里插入图片描述
思路:
模拟整个过程就行,把不同的分值钞票记一个数,记录每个钞票的个数,遇到不匹配的情况返回false即可。

  public boolean lemonadeChange(int[] bills) {int five=0;int ten=0;int twen=0;for(int bill:bills) {if(bill==5) {//当收款为5的时候直接++five++;}if(bill==10) {if(five>0) {five--;ten++;}else {return false;}}if(bill==20) {if(ten>0&&five>0) {ten--;five--;twen++;}else if(five>=3) {five-=3;twen++;}else {return false;}}}return true;}

406.根据身高重建队列

在这里插入图片描述

思路:
先将人按身高从大到小排列,如果身高一样,按k从小到大排列。这样就确定了一个变量,那就是前边的人一定比后边的人高,不管后边的人怎么往前插,都不会影响以及排好序的人的k。所以按身高从大到小排好序之后,只需要将人按k再进行排序即可。

  public int[][] reconstructQueue(int[][] people) {//将人根据身高从大到小排序,如果身高相同,k小的 在前边Arrays.sort(people,(a,b)->{if(a[0]==b[0]) {return a[1]-b[1];}return b[0]-a[0];});LinkedList<int[]>que=new LinkedList<>();for(int[]p:people) {que.add(p[1],p);}return que.toArray(new int[people.length][]);}

452.用最少数量的箭引爆气球在这里插入图片描述

思路:
将气球左边界从小到大排序,然后判断后边的左边界是不是比上一个的右边界大,如果大,那么就需要多出来一把箭。如果不大,那么更新右边界,右边界为这两个气球中右边界较小的那个。

 public int findMinArrowShots(int[][] points) {if(points.length==0) {return 0;}// 根据气球直径的开始坐标从小到大排序// 使用Integer内置比较方法,不会溢出Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int result=1;//默认就需要一个弓箭for(int i=1;i<points.length;i++) {if(points[i][0]>points[i-1][1]) {//当后一个气球的左边界大于前一个气球的右边界时,一定会多使用一个气球result++;}else {//更新右边界为最小的那一个points[i][1]=Math.min(points[i][1], points[i-1][1]);}}return result;}

435.无重叠区间

在这里插入图片描述

思路:
和扎气球那道题差不多,将所有区间先按左区间进行排序,然后如果后边的左边界小于前一个区间的右边界,那么就是边界覆盖了。然后count++.更新边界即可。

 public int eraseOverlapIntervals(int[][] intervals) {if(intervals.length==0) {return 0;}//让区间根据左区间进行排序Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));int result=0;//默认值是0for(int i=1;i<intervals.length;i++) {if(intervals[i][0]<intervals[i-1][1]) {//当后一个气球的左边界大于前一个气球的右边界时,一定会多使用一个气球result++;intervals[i][1]=Math.min(intervals[i][1], intervals[i-1][1]);//更新右边界为最小的那一个}}return result;}

763.划分字母区间

在这里插入图片描述
思路:
先遍历一遍数组,把每个字母出现的最右的边界记录下来。
然后第二次遍历数组的时候,right随着遍历的字母随时更新,更新的时候要保证right是最大的哪一个。
然后当i==right的时候将两个边界的差值放入结果集即可。

 public List<Integer> partitionLabels(String s) {int []hash=new int[27];//记录每个字母出现的最远距离char []array=s.toCharArray();for(int i=0;i<array.length;i++) {hash[array[i]-'a']=i;}List<Integer> result=new ArrayList<Integer>();int right=0;//右边界int left=0;//左边界for(int i=0;i<array.length;i++) {right=Math.max(right,hash[array[i]-'a']);//保证右边界是最大的那个if(i==right) {//当遍历到当前的最大边界时result.add(right-left+1);left=i+1;}}return result;}

56.合并区间

在这里插入图片描述
思路:
先把元素按左区间排序,如果后边的元素左边界大于上一个元素的右边界,直接加入结果集即可。如果不大于,那么更新右边界为两个边界的较大值。

 public int[][] merge(int[][] intervals) {List<int[]> res = new LinkedList<>();//按照左边界排序Arrays.sort(intervals, (x, y) -> Integer.compare(x[0], y[0]));//initial start 是最小左边界int start = intervals[0][0];int rightmostRightBound = intervals[0][1];for (int i = 1; i < intervals.length; i++) {//如果左边界大于最大右边界if (intervals[i][0] > rightmostRightBound) {//加入区间 并且更新startres.add(new int[]{start, rightmostRightBound});start = intervals[i][0];rightmostRightBound = intervals[i][1];} else {//更新最大右边界rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1]);}}res.add(new int[]{start, rightmostRightBound});return res.toArray(new int[res.size()][]);}

738.单调递增的数字

在这里插入图片描述
思路:
当发现前面的数字比后边的数字大时,前面的数字–。然后记录下当前的位置,让当前的位置以后的数字都变成9.

public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] chars = s.toCharArray();int start = s.length();for (int i = s.length() - 2; i >= 0; i--) {if (chars[i] > chars[i + 1]) {chars[i]--;start = i+1;}}for (int i = start; i < s.length(); i++) {chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));}

相关文章:

LeetCode分类刷题-----贪心算法

贪心算法贪心455.分发饼干376.摆动序列53.最大子序和122.买卖股票的最佳时机||55.跳跃游戏45.跳跃游戏||1005.K次取反后最大化的数组和134.加油站135.分发糖果860.柠檬水找零406.根据身高重建队列452.用最少数量的箭引爆气球![在这里插入图片描述](https://img-blog.csdnimg.cn…...

SiteWhere开源物联网平台支持意大利都灵智能计量

这篇简短的文章描述了一个基于 SiteWhere 开源物联网平台的智慧城市用例。 SiteWhere总部位于佐治亚州亚特兰大&#xff0c;是一个开源物联网应用程序支持平台 (AEP)&#xff0c;提供两种解决方案。首先&#xff0c;SiteWhere 的社区版 (CE) 是在 CPAL 许可下提供的。对于此解…...

【unity】rts engine 6 放置并建造建筑;

一 放置并建造建筑 GameManager -> Essential -> BuildingExtension 查看 building placement building position y offset Y轴偏移&#xff0c;建筑离地距离&#xff0c;可0.1 terrain max distance 放置建筑与允许地形的最大距离&#xff0c;可1 placable terrain …...

华为OD机试题 - 任务调度(JavaScript)| 含思路

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解: 任务调度题目输入输出描述示例一输入输出Code解题思路华为OD其…...

《Spring源码深度分析》第4章 自定义标签的解析

目录标题前言一、自定义标签使用二、自定义标签解析1、代码入口2、parseCustomElement【BeanDefinitionParserDelegate】2.1 resolve【DefaultNamespaceHandlerResolver】3、parse【NamespaceHandlerSupport】4、parse【AbstractBeanDefinitionParser】4.1 parseInternal【Abst…...

MATLAB绘制椭圆形相关系矩阵图

数据/代码准备 数据及代码下载&#xff1a; 下载专区-《MATLAB统计分析与应用&#xff1a;40个案例分析》程序与数据 绘图函数&#xff1a; matrixplot(data, PARAM1,val1, PARAM2,val2, ...) 案例 数据如下&#xff1a; MATLAB代码如下&#xff1a; clc close all clear …...

「SQL面试题库」 No_1 员工薪水中位数

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff…...

Python机器学习17——极限学习机(ELM)

本系列基本不讲数学原理&#xff0c;只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法。 背景&#xff1a; 极限学习机(ELM)也是学术界常用的一种机器学习算法&#xff0c;严格来说它应该属于神经网络&#xff0c;应该属于深度学习栏目&#xff0c;但是我这里把它…...

二分查找与判定树

二分查找的算法思想二分查找也称“折半查找”&#xff0c;要求查找表为采用顺序存储结构的有序表。本例一律采用升序排列。二分查找每一次都会比较给定值与序列[low,high]的中间元素&#xff0c;该元素的下标为mid (lowhigh)/2,若两者相等&#xff0c;则返回元素的下标为mid;如…...

反转链表(精美图示详解哦)

全文目录引言反转链表题目描述与思路实现总结引言 在学习了单链表的相关知识后&#xff0c;尝试实现一些题目可以帮助我们更好的理解单链表的结构以及对其的使用。 从这篇文章开始&#xff0c;将会介绍一些编程题来帮助我们更好的掌握单链表&#xff1a; 分别是反转链表、链表…...

深入理解多线程

一、线程基本概念 1、概述 线程是允许应用程序并发的一种机制。线程共享进程内的所有资源。 线程是调度的基本单位。 每个线程都有自己的 errno。 所有 pthread 函数均以返回 0 表示成功&#xff0c;返回一个正值表示失败。 编译 pthread 程序需要添加链接库&#xff08;…...

华为OD机试题 - 英文输入法(JavaScript)

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解: 英文输入法题目输入输出示例一输入输出说明示例一输入输出Code…...

64 云原生容器化

文章目录 一、什么是rancher二、为什么使用rancher三、 Rancher与[k8s](https://so.csdn.net/so/search?q=k8s&spm=1001.2101.3001.7020)的关系及区别1、Rancher具有的优势三、rancher安装1、细部介绍四、图形化操作1、执行2、图形化操作1、进行客户机登录rancher2、Ranch…...

IronXL for .NET 2023.2.5 Crack

关于适用于 .NET 的 IronXL 在 C# 中阅读和编辑 Excel 电子表格&#xff0c;无需 MS Office 或 Excel Interop。 IronXL for .NET 允许开发人员在 .NET 应用程序和网站中读取、生成和编辑 Excel&#xff08;和其他电子表格文件&#xff09;。您可以读取和编辑 XLS/XLSX/CSV/TS…...

计算机组成原理|第一章(笔记)

目录第一章 计算机系统概论1.1 计算机系统简介1.1.1 计算机的软硬件概念1.1.2 计算机系统的层次结构1.1.3 计算机组成和计算机体系结构1.2 计算机的基本组成1.2.1 冯 诺伊曼计算机的特点1.2.2 计算机的硬件框图1.2.3 计算机的工作过程1.3 计算机硬件的主要技术指标1.3.1 机器字…...

[ vulnhub靶机通关篇 ] Empire Breakout 通关详解

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

IP定位离线库有什么作用?

IP离线是什么意思&#xff1f;我们以丢失手机为例来寻找它&#xff0c;现在手机都有IP定位功能&#xff0c;只要手机开通了IP定位&#xff0c;就能找到手机。iPhone定位显示离线一般是iPhone手机关机了或者iPhone手机中“查找我的iPhone”功能关闭了。如果手机在手中的话可以打…...

[C++]vector模拟实现

目录 前言&#xff1a; 1. vector结构 2. 默认成员函数 2.1 构造函数 无参构造&#xff1a; 有参构造&#xff1a; 有参构造重载&#xff1a; 2.2 赋值运算符重载、拷贝构造&#xff08;难点&#xff09; 2.3 析构函数&#xff1a; 3. 扩容 3.1 reserve 3.2 resize…...

DevOps实战50讲-(2)Jenkins配置

1. Docker镜像方式安装拉取Jenkins镜像docker pull jenkins/jenkins编写docker-compose.ymlversion: "3.1" services:jenkins:image: jenkins/jenkinscontainer_name: jenkinsports:- 8080:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/首次启动会因为数据…...

LC-1599. 经营摩天轮的最大利润(贪心)

1599. 经营摩天轮的最大利润 难度中等39 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...