文章目录

  • O(1) 时间插入、删除和获取随机元素
  • 汇总区间
  • 改写字符串

O(1) 时间插入、删除和获取随机元素

设计一个支持在_平均 _时间复杂度 **O(1) , **执行以下操作的数据结构。
注意: 允许出现重复元素。

  1. insert(val):向集合中插入元素 val。
  2. remove(val):当 val 存在时,从集合中移除一个 val。
  3. getRandom:从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈线性相关。

示例:

// 初始化一个空的集合。
RandomizedCollection collection = new RandomizedCollection();
// 向集合中插入 1 。返回 true 表示集合不包含 1 。
collection.insert(1);
// 向集合中插入另一个 1 。返回 false 表示集合包含 1 。集合现在包含 [1,1] 。
collection.insert(1);
// 向集合中插入 2 ,返回 true 。集合现在包含 [1,1,2] 。
collection.insert(2);
// getRandom 应当有 2/3 的概率返回 1 ,1/3 的概率返回 2 。
collection.getRandom();
// 从集合中删除 1 ,返回 true 。集合现在包含 [1,2] 。
collection.remove(1);
// getRandom 应有相同概率返回 1 和 2 。
collection.getRandom();

答案:

class RandomizedCollection {private Map<Integer, Set<Integer>> map;private List<Integer> list;private Random random;private int size = 0;public RandomizedCollection() {map = new HashMap<>();list = new ArrayList<>();random = new Random();}public boolean insert(int val) {if (map.containsKey(val)) {Set<Integer> indexes = map.get(val);list.add(size, val);indexes.add(size);size++;return false;} else {Set<Integer> indexes = new HashSet<>();map.put(val, indexes);list.add(size, val);indexes.add(size);size++;return true;}}public boolean remove(int val) {if (!map.containsKey(val)) {return false;}Set<Integer> indexes = map.get(val);if (list.get(size - 1) == val) {indexes.remove(size - 1);size--;} else {Iterator<Integer> it = indexes.iterator();int index = it.next();it.remove();int last = list.get(size - 1);list.set(index, last);Set<Integer> set = map.get(last);set.remove(size - 1);set.add(index);size--;}if (indexes.size() == 0) {map.remove(val);}return true;}public int getRandom() {return list.get(random.nextInt(size));}
}
/*** Your RandomizedCollection object will be instantiated and called as such:* RandomizedCollection obj = new RandomizedCollection();* boolean param_1 = obj.insert(val);* boolean param_2 = obj.remove(val);* int param_3 = obj.getRandom();*/

汇总区间

给定一个无重复元素的有序整数数组 nums 。
返回 恰好覆盖数组中所有数字最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • “a->b” ,如果 a != b
  • “a” ,如果 a == b

示例 1:
输入:nums = [0,1,2,4,5,7] 输出:[“0->2”,“4->5”,“7”] 解释:区间范围是: [0,2] --> “0->2” [4,5] --> “4->5” [7,7] --> “7”
示例 2:
输入:nums = [0,2,3,4,6,8,9] 输出:[“0”,“2->4”,“6”,“8->9”] 解释:区间范围是: [0,0] --> “0” [2,4] --> “2->4” [6,6] --> “6” [8,9] --> “8->9”
示例 3:
输入:nums = [] 输出:[]
示例 4:
输入:nums = [-1] 输出:[“-1”]
示例 5:
输入:nums = [0] 输出:[“0”]

提示:

  • 0 <= nums.length <= 20
  • -231 <= nums[i] <= 231 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列
class Solution {public List<String> summaryRanges(int[] nums) {List<String> list = new ArrayList<>();int pre = 0;int next = 0;for (int i = 0; i < nums.length; i++) {if (i + 1 < nums.length && nums[i + 1] - nums[i] == 1) {next = i + 1;} else {if (next < i)next = i;if (pre != next) {list.add(nums[pre] + "->" + nums[next]);pre = i + 1;}if (pre == next) {list.add(nums[pre] + "");pre = i + 1;}}}return list;}
}

改写字符串

键盘录入一个字符串,将字符串中的大写改成小写,小写改成大写,数字改成*。例如heLLO123,输出后为HEllo***

import java.util.Scanner;
public class Transfer {public static void main(String[] args) {String str = "";Scanner s = new Scanner(System.in);System.out.println("请输入您想输入的字符串:");str = s.next();StringBuffer sb = new StringBuffer();int i;for (i = 0; i <= str.length() - 1; i++) {char ch;if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {ch = (char) (str.charAt(i) - 32); } else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {ch = (char) (str.charAt(i) + 32); } else if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {ch = '*'; } else {ch = str.charAt(i); }sb.append(ch); }String trStr = sb.toString(); System.out.println(sb.toString());}
}

本文内容到此结束了,
如有收获欢迎点赞

算法刷题-O(1) 时间插入、删除和获取随机元素、汇总区间相关推荐

  1. 常数时间插入、删除和获取随机元素

    常数时间插入.删除和获取随机元素 设计一个支持在平均时间复杂度O(1)下,执行以下操作的数据结构. insert(val): 当元素val不存在时,向集合中插入该项. remove(val): 元素v ...

  2. LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(vector + 哈希)

    文章目录 1. 题目 2. 解题 1. 题目 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. ...

  3. 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复

    力扣 O(1) 时间插入.删除和获取随机元素 - 允许重复 题目描述 设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集 ...

  4. 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

    链接:381. O(1) 时间插入.删除和获取随机元素 - 允许重复 题解: class RandomizedCollection { private:std::unordered_map<in ...

  5. leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复

    设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构. 注意: 允许出现重复元素. insert(val):向集合中插入元素 val. remove(val):当 val 存在时,从 ...

  6. Leetcode每日一题:381.insert-delete-getrandom-o1-duplicates-allowed(时间插入、删除和获取随机元素-允许重复)

    思路:这个题标签标的困难,但实际上没什么难度:随机和插入就用一个vector即可,随机生成len以内的数字temp,然后取出v[temp]就能达到要求:关键是remove这个操作,开始我用的常规遍历删 ...

  7. LeetCode每日一题——380. O(1) 时间插入、删除和获取随机元素

    目录 题目要求 示例 思路 题解 题目要求 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当 ...

  8. 2022-1-28 Leetcode 380.O(1)时间插入、删除和获取随机元素

    删除和插入的时间为 O(1)O(1)O(1)是哈希之类的,而O(1)O(1)O(1)的随机获取可以用数组实现. 所以比较好的方式是,使用数组实现数据的存储,使用哈希表存放数组的下标,每次删除的时候将数 ...

  9. LeetCode 380. 常数时间插入、删除和获取随机元素(哈希+vector)

    1. 题目 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构. insert(val):当元素 val 不存在时,向集合中插入该项. remove(val):元素 val 存在时, ...

最新文章

  1. POJ 2942 Knights of the Round Table (算竞进阶习题)
  2. 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践
  3. 配置项目启动的时候就加载 servlet
  4. 【The final】软件工程实践总结
  5. node 调用腾讯大数据接口
  6. 从php+mysql环境的注入,到整台服务器的沦陷
  7. 好看的php验证码,一漂亮的PHP图片验证码实例
  8. struts2+hibernate+spring配置管理(一)-配置文件2
  9. linux-01-linux中的一些特殊符号
  10. 小菜学Flex2(二 currentState初步使用)
  11. 云上持续交付实践系列1 --- java 篇
  12. 什么软件测试情侣头像,在线识别情侣头像
  13. ubuntu linux多声卡设置默认声卡shell指令
  14. modelsim vopt
  15. 第二期金牌网管师100%就业培训班招生简章
  16. 宇视科技android面试_宇视科技初面
  17. 疫苗预约系统,疫苗接种管理系统,疫苗预约管理系统毕设作品
  18. red hat 系统下载
  19. FreeMarker数值数据处理问题
  20. SpringBoot导出Excel表格到指定路径

热门文章

  1. java字段唯一性约束_java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件...
  2. 如何选择性价比高的GPU云服务器
  3. 【附源码】计算机毕业设计java郑州市智慧农贸市场管理系统设计与实现
  4. java my97时间显示节日_My97DatePicker时间控件使用说明
  5. 【送书福利-第五期】《网络结构数据分析与应用》
  6. datagridview列名(中文)与属性名(英文)匹配
  7. 韩顺平html学习笔记2
  8. echarts X轴Y轴鼠标滑动放大缩小
  9. php qcloud sdk weapp_微信小程序腾讯云php后台解决方案
  10. android:Invalid file name: must contain only [a-z0-9_.]错误