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_boundlower_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的更多相关文章

  1. 算法5: LeetCode_单链表_两数相加

    题目: * 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. * 请你将两个数相加,并以相同形式返回一个表示和的链表. * 你可 ...

  2. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

  3. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  4. H5单页面手势滑屏切换原理

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...

  5. 快速构建H5单页面切换骨架

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  6. ASP.NET Aries 入门开发教程9:业务表单的开发

    前言: 经过前面那么多篇的列表的介绍,终于到了大伙期待的表单开发了. 也是本系列的最后一篇文章了! 1:表单页面的权限设置与继承 对于表单页面,权限的设置有两种: 1:你可以选择添加菜单(设置为不显示 ...

  7. 【CSS进阶】伪元素的妙用--单标签之美

    最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值 ...

  8. bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序

    也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...

  9. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  10. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

随机推荐

  1. luoguP1505旅游(处理边权的树剖)

    /* luogu1505 非常简单的处理边权的树剖题. 在树上将一条边定向,把这条边的权值赋给这条边的出点 树剖的时候不计算lca权值即可 */ #include<bits/stdc++.h&g ...

  2. ElasticSearch 常见问题

    ElasticSearch 常见问题 丈夫有泪不轻弹,只因未到伤心处. 1.说说 es 的一些调优手段. 仅索引层面调优手段: 1.1.设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引, ...

  3. 嵌入式-C语言基础:结构体

    数组只能存放一种类型的数据,而结构体内可以存放不同类型的数据. #include<stdio.h> #include <string.h> struct Student { c ...

  4. SpringBoot使用@Async的总结!

    一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度. 之前有写过一篇文章叫做: 异步编程利器:CompletableFuture 在实际工作中也更加推荐使用CompletableFuture ...

  5. i春秋phone number

    点开题目是一个普普通通的登录注册界面,随便注册一个点进去有两个功能,一个是查看电话和你相同的用户,一个是登出. 点击查询就可以看到用户数 这里有访问数据库的操作应该,所以就应该用数据库注入来解题. 又 ...

  6. javaSE--核心之一:IO流

    Java IO流框架结构: IO的主要内容包括输入.输出两种IO流,这两种流中又分为字节流和字符流,字节流是以字节为单位来处理输入.输出流,而字符流是以字符为单位来处理输入.输出流. InputStr ...

  7. Windows机器下VSCode安装及使用CmakeLists编译工程demo

    使用VSCode, Mingw and Cmake写工程代码,从零开始写的那种,全过程分享...... 你若发现该帖中有待商榷的地方,还请指正赐教,先行拜谢了! 1 软件下载 1.1 vscode下载 ...

  8. ArcGIS API for JS 访问浏览器提示不安全链接的服务时 如何设置

    当我们通过ArcGISServer发布了服务后,首先要在要访问的计算机上通过浏览器访问下服务是否可用.但有时候会出现不安全的标识. 如果这样的链接直接放到代码中,可能会加载失败. 代码如下. var ...

  9. python-CSV文件的读写

    CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分隔值,其文件以纯文本的形式存储表格数据. 可以理解成一个表格,只不过这个 表格是以纯文本的形式显示,单元格与单元格之 ...

  10. 模拟Promise的功能

    模拟Promise的功能,  按照下面的步骤,一步一步 1. 新建是个构造函数 2. 传入一个可执行函数 函数的入参第一个为 fullFill函数 第二个为 reject函数: 函数立即执行, 参数函 ...