LeetCode_单周赛_332
6354. 找出数组的串联值
题意
将数组首尾元素接在一起,就是串联值。
串联之后删除,如果只剩下一个元素,加上这个元素即可
双指针,从首和尾向中间移动即可
code
注意:用 long
没看题目用了 int wa了一发
class Solution {
public long findTheArrayConcVal(int[] nums) {
int n = nums.length;
int l = 0, r = n - 1;
long ans = 0;
while (l < r) {
String s = "";
s += nums[l++];
s += nums[r--];
ans += Integer.parseInt(s);
}
if (l == r) ans += nums[l];
return ans;
}
}
6355. 统计公平数对的数目
题意
给定 lower 和 upper 找到 数组中 两个不同的数字,如果满足 lower <= nums[i] + nums[j] <= upper
就是一组公平数对。
求公平数对的个数
我们枚举每个 nums[i]
将 lower <= nums[i] + nums[j] <= upper
变形为:lower - nums[i] <= nums[j] <= upper - nums[i]
所以我们二分找到 第一个大于 upper - nums[i]
的位置,和 第一个 大于等于 lower- nums[i]
的位置前者减去后者即可得到差。
对应的 c++中的函数就是 uppper_bound
和 lower_bound
,Java中么有这俩函数,我们自己写一个
并且,我们求的是数对,有重复的,为防止重复,我们只搜索下标为 i 的数的 左边的数,也避免了 i 被统计进去的情况
code
class Solution {
public long countFairPairs(int[] nums, int lower, int upper) {
long ans = 0;
int n = nums.length;
Arrays.sort(nums);
// lower <= nums[i] + nums[j] <= upper
// 枚举 nums[i] 找 j
// lower - nums[i] <= nums[j] <= upper - nums[i]
for (int i = 0; i < n; i++) {
int a = i, b = i;
// upper_bound
int l = 0, r = i - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] > upper - nums[i]) r = mid;
else l = mid + 1;
}
if (nums[l] > upper - nums[i]) a = l;
// a = l;
// if (nums[a] <= upper - nums[i]) a = i;
// lower_bound
l = 0; r = i - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] >= lower - nums[i]) r = mid;
else l = mid + 1;
}
if (nums[l] >= lower - nums[i]) b = l;
// b = l;
// if (nums[b] < lower - nums[i]) b = i;
ans += a - b;
}
return ans;
}
}
6356. 子字符串异或查询
题意
要满足 val ^ firsti == secondi
等号两边同时 ^ first 得到 val = first ^ second
所以我们只要找 queries数组中的 first 和 second 异或值时候存在于 s 中
因为 异或并不会增加二进制位数,0 <= firsti, secondi <= 109
,小于 2^30 - 1,最多就 31 位,所以枚举的时候只需要枚举字符串的连续 30 个即可
s 是 1e4 时间复杂度最多就 1e4 * 30 = 3e5 足够的
后面枚举queries是 1e5
时间复杂度 = 4e5
用 map 预处理,存储 s 的二进制子串出现过的 十进制数字,以及对应的 边界 ,要求存储长度最小的子串
code
class Solution {
public int[][] substringXorQueries(String s, int[][] queries) {
HashMap<Integer, int[]> mp = new HashMap<>();
int n = s.length();
char[] c = s.toCharArray();
for (int i = 0; i < n; i++) {
int x = 0;
for (int j = i; j < i + 30 && j < n; j++) { // 计算子串
x = (x << 1) | (c[j] - '0');
if (!mp.containsKey(x) || (j - i < mp.get(x)[1] - mp.get(x)[0])) {
mp.put(x, new int[]{i, j});
}
}
}
ArrayList<int[]> a = new ArrayList<>();
for (var pr : queries) {
int t = pr[0] ^ pr[1];
if (mp.getOrDefault(t, null) != null)
a.add(new int[]{mp.get(t)[0], mp.get(t)[1]});
else
a.add(new int[]{-1, -1});
}
int len = a.size();
int[][] ans = new int[len][2];
for (int i = 0; i < len; i++) {
ans[i] = a.get(i);
}
return ans;
}
}
LeetCode_单周赛_332的更多相关文章
- 算法5: LeetCode_单链表_两数相加
题目: * 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. * 请你将两个数相加,并以相同形式返回一个表示和的链表. * 你可 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- H5单页面手势滑屏切换原理
H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...
- 快速构建H5单页面切换骨架
在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...
- ASP.NET Aries 入门开发教程9:业务表单的开发
前言: 经过前面那么多篇的列表的介绍,终于到了大伙期待的表单开发了. 也是本系列的最后一篇文章了! 1:表单页面的权限设置与继承 对于表单页面,权限的设置有两种: 1:你可以选择添加菜单(设置为不显示 ...
- 【CSS进阶】伪元素的妙用--单标签之美
最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
随机推荐
- C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...
- openstack单机部署 未完成
注:centos8单机版 注:本次实验手动配置密码均为admin 环境准备:配置hosts文件 192.168.116.85为本机IP echo '192.168.116.85 controller ...
- 关于CSDN微信登录接口的研究
代码 import requests import re from threading import Thread import time import requests from io import ...
- 一文带你了解 Spring 的@Enablexxx 注解
layout: post categories: Java title: 一文带你了解 Spring 的@Enablexxx 注解 tagline: by 子悠 tags: - 子悠 前面的文章给大家 ...
- c++学习笔记(入门)
1 struct和class的区别 struct成员变量(成员函数)的访问属性缺省的情况下默认为public. class成员变量(成员函数)的访问属性缺省的情况下默认为private. 2 初始化列 ...
- Day30:ArrayList详解
ArrayList 1.1 集合概述 当我们要存储多个数据时,固定长度的数组存储格式已经满足不了我们的需要了,且不能满足变化的需求: Java中集合类则可以解决我们的需求 特点:提供一种存储空间可变的 ...
- 【Shell案例】【打印指定行用sed、for循环、head和tail配合使用】4、输出第5行的内容
描述写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容. 示例:假设 nowcoder.txt 内容如下:welcometonowcoderthisisshellcode ...
- 【面试题总结】JVM01-组成及垃圾回收
一.概念 1.JVM组成及作用 (1)组成:类加载器.运行时数据区(Java内存模型).执行引擎.本地库接口 (2)作用: 类加载器(ClassLoader)把class文件转换成字节码: 运行时数据 ...
- cs231n__4.1 Backpropagation and Neural Network
CS231n 4.1 Backpropagation 回顾: 两个损失函数: 优化的方法: 如何计算梯度: 用有限差分估计 直接计算偏导数(解析梯度) 今天,我们要学习如何计算任意复杂度的解析梯度 要 ...
- m3u8文件后缀jpg,png等处理方法及视频合并
处理 # 解析伪装成png的ts def resolve_ts(src_path, dst_path): ''' 如果m3u8返回的ts文件地址为 https://p1.eckwai.com/ufil ...