【LeetCode每日一题合集】2023.10.9-2023.10.15(贪心⭐位运算的应用:只出现一次的数字)

文章目录

  • 2578. 最小和分割(贪心)
  • 2731. 移动机器人(脑筋急转弯+排序统计)
  • 2512. 奖励最顶尖的 K 名学生(哈希表+排序)(练习Java语法)
    • 代码风格1
    • 代码风格2
  • 2562. 找出数组的串联值(简单模拟)
    • 写法1——模拟
    • 写法2——String、Integer 的 API
  • 1488. 避免洪水泛滥⭐
    • 解法1——贪心+优先队列
    • 解法2——贪心+二分查找
      • 补充:TreeSet的ceiling()和floor()
  • 136. 只出现一次的数字(异或的应用)
  • 137. 只出现一次的数字 II⭐(位运算)
    • 解法1——依次确定二进制的每一位
    • 解法2——数字电路设计🚹

2578. 最小和分割(贪心)

https://leetcode.cn/problems/split-with-minimum-sum/?envType=daily-question&envId=2023-10-09

在这里插入图片描述

分给两个数字,两个数字的位数越接近越好。
除此之外,数字越大就放在越靠后的位置即可。

class Solution {public int splitNum(int num) {List<Integer> ls = new ArrayList<>();while (num != 0) {ls.add(num % 10);num /= 10;}Collections.sort(ls);int n = ls.size(), ans = 0;for (int i = 0, t = 1; i < n; ++i) {ans += ls.get(n - 1 - i) * t;if (i % 2 == 1) t *= 10;}return ans;}
}

2731. 移动机器人(脑筋急转弯+排序统计)

https://leetcode.cn/problems/movement-of-robots/description/?envType=daily-question&envId=2023-10-10

在这里插入图片描述

提示:

2 <= nums.length <= 10^5
-2 * 10^9 <= nums[i] <= 2 * 10^9
0 <= d <= 10^9
nums.length == s.length
s 只包含 'L' 和 'R' 。
nums[i] 互不相同。

两个机器人相碰之后可以认为是相互代替了对方。

class Solution {public int sumDistance(int[] nums, String s, int d) {final int MOD = (int)1e9 + 7;int n = nums.length;long[] p = new long[n];for (int i = 0; i < n; ++i) {if (s.charAt(i) == 'L') p[i] = nums[i] - d;else p[i] = nums[i] + d;}Arrays.sort(p);long ans = 0, sum = 0;for (int i = 1; i < n; ++i) {long x = p[i] - p[i - 1];sum = (sum + x * i) % MOD;ans = (ans + sum) % MOD;}return (int)ans;}
}

2512. 奖励最顶尖的 K 名学生(哈希表+排序)(练习Java语法)

https://leetcode.cn/problems/reward-top-k-students/description/?envType=daily-question&envId=2023-10-11

在这里插入图片描述

在这里插入图片描述

代码风格1

class Solution {public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {Map<String, Integer> words = new HashMap<>();for (String word: positive_feedback) words.put(word, 3);for (String word: negative_feedback) words.put(word, -1);int n = report.length;int[] scores = new int[n];int[][] stus = new int[n][2];for (int i = 0; i < n; ++i) {int s = 0;for (String w: report[i].split(" ")) s += words.getOrDefault(w, 0);stus[i] = new int[]{s, student_id[i]};}Arrays.sort(stus, (a, b) -> {return a[0] != b[0]? b[0] - a[0]: a[1] - b[1];});List<Integer> ans = new ArrayList<>();for (int i = 0; i < k; ++i) ans.add(stus[i][1]);return ans;}
}

代码风格2

class Solution {Set<String> pos, neg;public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {int n = student_id.length;pos = new HashSet<>(Arrays.stream(positive_feedback).collect(Collectors.toSet()));neg = new HashSet<>(Arrays.stream(negative_feedback).collect(Collectors.toSet()));List<Integer> ans = new ArrayList<>();Map<Integer, Integer> s = new HashMap<>();      // 计算分数for (int i = 0; i < n; ++i) {s.merge(student_id[i], cp(report[i]), Integer::sum);}List<Integer> sId = Arrays.stream(student_id).boxed().collect(Collectors.toList());Collections.sort(sId, (x, y) -> {int a = s.getOrDefault(x, 0), b = s.getOrDefault(y, 0);if (a != b) return b - a;return x - y;});for (int i = 0; i < k; ++i) ans.add(sId.get(i));return ans;}public int cp(String r) {String[] ws = r.split(" ");int res = 0;for (String w: ws) {if (pos.contains(w)) res += 3;else if (neg.contains(w)) res -= 1;}return res;}
}

2562. 找出数组的串联值(简单模拟)

https://leetcode.cn/problems/find-the-array-concatenation-value/description/?envType=daily-question&envId=2023-10-12

在这里插入图片描述

提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 10^4

写法1——模拟

class Solution {public long findTheArrayConcVal(int[] nums) {long ans = 0;for (int l = 0, r = nums.length - 1; l <= r; ++l, --r) {if (l != r) {ans += op(nums[l], nums[r]);} else {ans += nums[l];}}return ans;}public int op(int a, int b) {int t = b;while (t != 0) {a *= 10;t /= 10;}return a + b;}
}

写法2——String、Integer 的 API

class Solution {public long findTheArrayConcVal(int[] nums) {long ans = 0;for (int i = 0, j = nums.length - 1; i <= j; i++, j--) {if (i != j) {ans += Integer.parseInt(Integer.toString(nums[i]) + Integer.toString(nums[j]));} else {ans += nums[i];}}return ans;}
}

1488. 避免洪水泛滥⭐

https://leetcode.cn/problems/avoid-flood-in-the-city/description/?envType=daily-question&envId=2023-10-13

在这里插入图片描述

提示:

1 <= rains.length <= 10^5
0 <= rains[i] <= 10^9

解法1——贪心+优先队列

https://leetcode.cn/problems/avoid-flood-in-the-city/solutions/303095/tan-xin-you-xian-dui-lie-he-xin-si-lu-yi-ju-hua-by/?envType=daily-question&envId=2023-10-13

每当一个湖泊下雨时,将其下一个下雨的下标存入优先队列中。
这样当可以排水时,可以O(1)取出下一个最需要排水的湖泊。

class Solution {public int[] avoidFlood(int[] rains) {int n = rains.length;int[] ans = new int[n];Set<Integer> s = new HashSet<>();                   // 存储已经有水的湖泊Map<Integer, Deque<Integer>> m = new HashMap<>();   // 湖编号=>下雨日期双端队列for (int i = 0; i < n; ++i) {int r = rains[i];if (r > 0) {if (!m.containsKey(r)) m.put(r, new ArrayDeque<Integer>());m.get(r).offerLast(i);}}PriorityQueue<Integer> pq = new PriorityQueue<>();  // 优先队列,下一个最需要被排水的湖泊编号for (int i = 0; i < n; ++i) {if (rains[i] > 0) {if (s.contains(rains[i])) {return new int[]{};     // 已经有水了,不能避免} else {ans[i] = -1;s.add(rains[i]);        m.get(rains[i]).pollFirst();if (!m.get(rains[i]).isEmpty()) pq.offer(m.get(rains[i]).peekFirst());}} else {if (pq.isEmpty()) ans[i] = 1;else {int idx = pq.poll();ans[i] = rains[idx];s.remove(rains[idx]);}}}return ans;}
}

解法2——贪心+二分查找

https://leetcode.cn/problems/avoid-flood-in-the-city/solutions/2472026/bi-mian-hong-shui-fan-lan-by-leetcode-so-n5c9/?envType=daily-question&envId=2023-10-13
我们总是在最早的晴天日子中进行抽干操作,以最大程度地避免洪水的发生。

class Solution {public int[] avoidFlood(int[] rains) {int n = rains.length;TreeSet<Integer> st = new TreeSet<>();      // 记录可用日期int[] ans = new int[n];Arrays.fill(ans, 1);Map<Integer, Integer> last = new HashMap<>();// 记录各个湖泊上一个下雨的下标for (int i = 0; i < n; ++i) {if (rains[i] == 0) st.add(i);else {ans[i] = -1;if (last.containsKey(rains[i])) {Integer idx = st.ceiling(last.get(rains[i]));   // 二分查找到最早可用排水的日期if (idx == null) return new int[0];ans[idx] = rains[i];st.remove(idx);}last.put(rains[i], i);}}return ans;}
}

二分查找可以使用 TreeSet 的 ceiling() 方法来实现。

补充:TreeSet的ceiling()和floor()

TreeSet 是 Java 中的一个基于红黑树实现的有序集合类,它提供了一些用于查找元素的方法,包括 ceiling() 和 floor() 方法。这两个方法用于查找与指定元素最接近的元素,但有一些差异。

ceiling(E e) 方法
ceiling(E e) 方法返回集合中大于等于指定元素 e 的最小元素,或者如果不存在这样的元素,则返回 null。
如果存在等于 e 的元素,它也会返回这个元素。

floor(E e) 方法
floor(E e) 方法返回集合中小于等于指定元素 e 的最大元素,或者如果不存在这样的元素,则返回 null。
如果存在等于 e 的元素,它也会返回这个元素。

136. 只出现一次的数字(异或的应用)

https://leetcode.cn/problems/single-number/description/?envType=daily-question&envId=2023-10-14
在这里插入图片描述

提示:
1 <= nums.length <= 3 * 10^4
-3 * 104 <= nums[i] <= 3 * 10^4
除了某个元素只出现一次以外,其余每个元素均出现两次。

class Solution {public int singleNumber(int[] nums) {int ans = 0;for (int num: nums) ans ^= num;return ans;}
}

137. 只出现一次的数字 II⭐(位运算)

https://leetcode.cn/problems/single-number-ii/description/?envType=daily-question&envId=2023-10-15

在这里插入图片描述

解法1——依次确定二进制的每一位

在这里插入图片描述

class Solution {public int singleNumber(int[] nums) {int ans = 0;for (int i = 0; i < 32; ++i) {						// 枚举每一位int total = 0;for (int x: nums) total += ((x >> i) & 1);		// 枚举每个数字if (total % 3 == 1) ans |= 1 << i; }return ans;}
}

解法2——数字电路设计🚹

略,见:https://leetcode.cn/problems/single-number-ii/solutions/746993/zhi-chu-xian-yi-ci-de-shu-zi-ii-by-leetc-23t6/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/165093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【七:docken+jenkens部署】

一&#xff1a;腾讯云轻量服务器docker部署Jenkins https://blog.csdn.net/qq_35402057/article/details/123589493 步骤1&#xff1a;查询jenkins版本&#xff1a;docker search jenkins步骤2&#xff1a;拉取jenkins镜像 docker pull jenkins/jenkins:lts步骤3&#xff1a;…

网络安全中的人工智能:优点、缺点、机遇和危险

2022 年秋天&#xff0c;人工智能在商业领域爆发&#xff0c;引起了轰动&#xff0c;不久之后&#xff0c;似乎每个人都发现了 ChatGPT 和 DALL-E 等生成式 AI 系统的新的创新用途。世界各地的企业开始呼吁将其集成到他们的产品中&#xff0c;并寻找使用它来提高组织效率的方法…

MySQL --- 聚合查询 和 联合查询

聚合查询&#xff1a; 下文中的所有聚合查询的示例操作都是基于此表&#xff1a; 聚合函数 聚合函数都是行与行之间的运算。 count() select count(列名) from 表名; 统计该表中该列的行数&#xff0c;但是 null 值不会统计在内&#xff0c;但是如果写为 count(*) 那么 nu…

Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】

Redis性能滑坡&#xff1a;哈希表碰撞的不速之客 前言第一部分&#xff1a;Redis哈希表简介第二部分&#xff1a;哈希表冲突原因第三部分&#xff1a;Redis哈希函数第四部分&#xff1a;哈希表冲突的性能影响第五部分&#xff1a;解决冲突策略第六部分&#xff1a;redis是如何解…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日&#xff0c; 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品&#xff0c;分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

深入探讨 Golang 中的追加操作

通过实际示例探索 Golang 中的追加操作 简介 在 Golang 编程领域&#xff0c;append 操作是一种多才多艺的工具&#xff0c;使开发人员能够动态扩展切片、数组、文件和字符串。在这篇正式的博客文章中&#xff0c;我们将踏上一段旅程&#xff0c;深入探讨在 Golang 中进行追加…

Linux入门攻坚——4、shell编程初步、grep及正则表达式

bash的基础特性&#xff08;续&#xff09;&#xff1a; 1、提供了编程环境&#xff1a; 编程风格&#xff1a;过程式&#xff1a;以指令为中心&#xff0c;数据服务于执行&#xff1b;对象式&#xff1a;以数据为中心&#xff0c;指令服务于数据 shell编程&#xff0c;编译执…

墨迹天气商业版UTF-8模板,Discuz3.4灰白色风格(带教程)

1.版本支持&#xff1a;Discuzx3.4版本&#xff0c;Discuzx3.3版本&#xff0c;DiscuzX3.2版本。包括网站首页&#xff0c;论坛首页&#xff0c;论坛列表页&#xff0c;论坛内容页&#xff0c;论坛瀑布流,资讯列表页(支持多个)&#xff0c;产品列表页(支持多个)&#xff0c;关于…

Visual Components软件有哪些用途 衡祖仿真

Visual Components是一款用于制造业虚拟仿真的软件&#xff0c;主要用于工业自动化和制造领域。我们一起来看一下该软件有哪些功能吧&#xff01; 1、工厂仿真 Visual Components可以建立虚拟的工厂环境&#xff0c;模拟和优化生产流程。用户可以创建工厂布局、定义设备和机器人…

多年没有遇到如此流畅的面试了

美东一公司的面试&#xff0c;有多年没有遇到如此流畅的面试了。 本来说的面试时间是 30 分钟&#xff0c;这个还是第一轮处于电话面试那种&#xff0c;但是不知道为什么最后面试整个时间都延长到了快一个小时&#xff0c;貌似双方都还继续沟通下&#xff0c;有点意犹未尽的感觉…

【Java】正则表达式,校验数据格式的合法性。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 正则表达式 正则表达式&#xff1a; ①可以校…

“第四十五天” 数据结构基本概念

目前看的有关数据结构的课&#xff0c;估计这周就看完了&#xff0c;但感觉差很多&#xff0c;还是和c一样&#xff0c;这样过一下吧。但可能比较急&#xff0c;目前是打算争取寒假回家之前把四大件都先大致过一遍。 数据结构里面有很多新的定义和概念&#xff0c;学到现在&am…

R语言中fread怎么使用?

R语言中 fread 怎么用&#xff1f; 今天分享的笔记内容是数据读取神器fread&#xff0c;速度嘎嘎快。在R语言中&#xff0c;fread函数是data.table包中的一个功能强大的数据读取函数&#xff0c;可以用于快速读取大型数据文件&#xff0c;它比基本的read.table和read.csv函数更…

SELECT COUNT(*) 会造成全表扫描吗?

前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢&#xff1f; SELECT COUNT(*) FROM SomeTable 网上有一种说法&#xff0c;针对无 where_clause 的 COUNT(*)&#xff0c;MySQL 是有优化的&#xff0c;优化器会选择成本最小的辅助索引查询计数&#xff0c;其实反而性能…

物联网_00_物理网介绍

1.物联网为什么会出现? 一句话-----追求更高品质的生活, 随着科技大爆炸, 人类当然会越来越追求衣来伸手饭来张口的懒惰高品质生活, 最早的物联网设备可以追溯到19世纪末的"在线可乐售卖机"和"特洛伊咖啡壶"(懒惰的技术人员为了能够实时看到物品的情况而设…

spring cloud Eureka集群模式搭建(IDEA中运行)

spring cloud Eureka集群模式搭建&#xff08;IDEA中运行&#xff09; 新建springboot 工程工程整体目录配置文件IDEA中部署以jar包形式启动总结 新建springboot 工程 新建一个springboot 工程&#xff0c;命名为&#xff1a;eureka_server。 其中pom.xml文件为&#xff1a; …

如何理解TCP/IP协议?

一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP&#xff08;网际协议&#xff09; 用于封包交换数据网…

笔记本电脑Windows10安装

0 前提 安装windows10的电脑为老版联想笔记本电脑&#xff0c;内部没有硬盘&#xff0c;临时加装了1T的硬盘。 1u盘准备 准备u盘&#xff0c;大小大于16G。u盘作为系统盘时&#xff0c;需要将内部的其他文件备份&#xff0c;然后格式化。u盘格式化后&#xff0c;插入一款可以…

马赫数相关函数

1 函数 k是常数&#xff0c;Ma是变量 2应用程序 点击上方资源下载 3 计算 3.1 c语言 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h>#define k 1.4 // k为常数// 定义的函数 double T(double Ma) {return pow((1 (k - 1) / 2 * Ma …

SpringCloud 微服务全栈体系(二)

第三章 Eureka 注册中心 假如我们的服务提供者 user-service 部署了多个实例&#xff0c;如图&#xff1a; 思考几个问题&#xff1a; order-service 在发起远程调用的时候&#xff0c;该如何得知 user-service 实例的 ip 地址和端口&#xff1f;有多个 user-service 实例地址…