春招学习第六天(6/30)
今天的力扣每日一题,没啥好说的。就是模拟一下。困难题我唯唯诺诺,简单题我重拳出击。
1046. 最后一块石头的重量
有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。
示例:
输入:[2,7,4,1,8,1]
输出:1
解释:
先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],
再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],
接着是 2 和 1,得到 1,所以数组转换为 [1,1,1],
最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。
AC代码:(用一个最大堆就可以了,也可以每次都排序一下取最后的)
public int lastStoneWeight(int[] stones) { PriorityQueue<Integer> pq=new PriorityQueue<>((o1, o2) ->o2-o1 ); for (int i = 0; i <stones.length ; i++) { pq.add(stones[i]); } while (pq.size()>=2){ int a=pq.poll(); int b=pq.poll(); //System.out.println("a: "+a +"b: "+b); if (a!=b){ pq.add(Math.abs(a-b)); } } if (pq.size()==1){ return pq.poll(); } else{ return 0; } }
然后是比较那啥的爬虫部分。写论文好累
XPATH爬取网页
1.先导入包
import requests from lxml import etree
2.然后爬取一下百度网页
url = "http://news.baidu.com/ns?word=" + requests.utils.quote("人工智能") headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,' 'application/signed-exchange;v=b3;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/80.0.3987.149 Safari/537.36'} response = requests.get(url, headers=headers) response.encoding = 'utf-8'
3.调用程序包lxml.etree的构造函数HTML()将HTML网页源代码的字符串转换为元素树可识别的HTML对象。
走你!
ehtml = etree.HTML(response.text)
然后就可以开始解析网页啦!
1. 所有节点
以下例子选取所有节点,使用//*实现。
result = ehtml.xpath('//*')
匹配可以指定节点名称。以下例子获取所有节点h3。
result = ehtml.xpath('//h3')
2. 子节点
以下例子选取节点div的直接子节点h3的直接子节点a。这里仅选取了节点,返回结果为节点对象。
result1 = ehtml.xpath('//div/h3/a') result1
单斜杠/用于选取直接子节点,如果要获取所有子孙节点,需要使用双斜杠//。 以下例子获取节点div下的所有子孙节点h3。
result = ehtml.xpath('//div//h3') result
3. 节点属性
以下例子使用@<属性名>选取节点a的属性href。
result = ehtml.xpath('//div/h3/a/@href') result
4. 节点文本内容
以下例子使用text()选取节点a的所有子孙节点的文本内容。
result = ehtml.xpath('//div/h3/a//text()') result