LeetCode 第 151 场周赛
一、查询无效交易(LeetCode-1169)
1.1 题目描述



1.2 解题思路
根据,它和另一个城市中同名的另一笔交易相隔不超过 60 分钟(包含 60 分钟整)
得出
城市A和其他城市任何一笔交易,时间的绝对值要大于60分钟才有效,若小于60分钟,则当前交易和其他城市的交易均无效。
理解了这层意思,问题就基本解决了。如果想到所有交易按时间排序,就把问题想复杂了。
1.3 解题代码
public class Solution {
List<String> res = new ArrayList<>();
List<Transaction> list = new ArrayList<>();
class Transaction {
public String name;
public int time;
public int amount;
public String city;
public String origin;
}
public List<String> invalidTransactions(String[] transactions) {
//对所有交易按时间排序
for (String transaction : transactions) {
list.add(str2Transaction(transaction));
}
Map<String, List<Transaction>> map = new HashMap<>();
for (Transaction transaction : list) {
//交易金额超过 ¥1000 无效
if (transaction.amount > 1000) {
save(transaction.origin);
}
//它和另一个城市中同名的另一笔交易相隔不超过 60 分钟
// 可以理解为其他城市的所有同名交易)
List<Transaction> temp = map.get(transaction.name);
if (temp == null) {
map.put(transaction.name, new ArrayList<>());
} else {
for (Transaction a : temp) {
//比较是否是同一个城市
if (!transaction.city.equals(a.city) && Math.abs(transaction.time - a.time) <= 60) {
save(transaction.origin);
save(a.origin);
}
}
}
map.get(transaction.name).add(transaction);
}
return res;
}
//字符串转换为交易对象
private Transaction str2Transaction(String transaction) {
Transaction transaction1 = new Transaction();
String[] fields = transaction.split(",");
transaction1.name = fields[0];
transaction1.time = Integer.valueOf(fields[1]);
transaction1.amount = Integer.valueOf(fields[2]);
transaction1.city = fields[3];
transaction1.origin = transaction;
return transaction1;
}
//去重保存结果
private void save(String str) {
if (!res.contains(str)) {
res.add(str);
}
}
}
优化后的写法
public List<String> invalidTransactions(String[] transactions) {
List<String> res = new ArrayList<>();
if (transactions.length == 0) {
return res;
}
Map<String, List<Integer>> map = new HashMap<>();
int len = transactions.length;
//存放交易索引,用于去重处理
int[] resArray = new int[len];
for (int i = 0; i < len; i++) {
String[] field = transactions[i].split(",");
//交易金额超过 ¥1000 无效
if (Integer.valueOf(field[2]) > 1000) {
resArray[i] = 1;
}
//它和另一个城市中同名的另一笔交易相隔不超过 60 分钟
// 可以理解为其他城市的所有交易
if (map.get(field[0]) == null) {
map.put(field[0], new ArrayList<>());
} else {
for (int j : map.get(field[0])) {
String[] fieldTemp = transactions[j].split(",");
// 比较城市名称与相差的时间
if (!field[3].equals(fieldTemp[3]) && Math.abs(Integer.valueOf(field[1]) - Integer.valueOf(fieldTemp[1])) <= 60) {
resArray[i] = 1;
resArray[j] = 1;
}
}
}
map.get(field[0]).add(i);
}
for (int i = 0; i < len; i++) {
if(resArray[i] == 1){
res.add(transactions[i]);
}
}
return res;
}
二、比较字符串最小字母出现频次(LeetCode-1170)

三、从链表中删去总和值为零的连续节点(LeetCode-1171)

LeetCode 第 151 场周赛的更多相关文章
- LeetCode第151场周赛(Java)
这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...
- LeetCode 第 165 场周赛
LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...
- Leetcode第 217 场周赛(思维量比较大)
Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
- LeetCode第152场周赛(Java)
这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...
- Leetcode 第137场周赛解题报告
今天的比赛的题目相对来说比较「直白」,不像前几周都是一些特定的算法,如果你没学过不可能想出来. 做了这些周,对leetcode比赛的题目也发现了一些「规律」. 一般前两道题都很「简单」,只要有想法,直 ...
- LeetCode 第 150 场周赛
一.拼写单词(LeetCode-1160) 1.1 题目描述 1.2 解题思路 由于给定的chars,每个字母只能用一次,所以用大小为26的数组charsArray来表示a-z(例如charsArra ...
- LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)
5452. 判断能否形成等差数列 给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...
- Leetcode 第136场周赛解题报告
周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...
随机推荐
- Saas软件更新以及小程序更新的教训
Saas软件即使版本更新多次,也要兼顾老客户,兼容旧功能. 对于小程序调用的接口,无法保证客户会更新小程序,因此需要兼容使用旧版本小程序的客户,更不能删除接口.
- 安卓开发之生成cache目录和files目录
package com.lidaochen.test; import android.os.Bundle; import android.support.v7.app.AppCompatActivit ...
- sql server with as只能查询一次
WITH Emp AS (SELECT acc.* FROM GXSpreadDB.dbo.gxs_account acc LEFT JOIN RYAccountsDB.dbo.AccountsInf ...
- 表格分页——tablePagination
背景:表格是最为通用的展示方式,为了展示的统一性,以及分页组件的重用,这里写一个分页组件,供比较多或者较少数据2种表格进行分页展示. 分页组件: <template> <el-pag ...
- Dism++备份还原系统
使用dism++备份和还原需要下载该工具,并选择与系统对应的Dism++x64或Dism++x32运行进行操作. Dism++网络下载地址:http://www.chuyu.me/zh-Hans/in ...
- python小知识点汇总
一 写mysql 场景:自动化用例中需要构造数据,写入redis 表中已有该primary_key的记录,在现有基础上更新字段 表中无该记录,需要插入 # 请求传入table字段,db.table,c ...
- linux网络编程之socket编程(十四)
经过令国鸡冻的APEC会之后,北京的冬天终于不冷了,有暖气的日子就是倍儿爽呀~~洗完热水澡,舒服的躺在床上欢乐地敲打着键盘,是件多么幸福的事呀,好了,抒发情感后,正题继续. 上节中已经初步学习了UDP ...
- WebAPI 问题集锦
一.OWIN 禁用设置 在项目中添加了 OWIN 的引用,打算后面用到,但是在启动项目的时候报错: “No assembly found containing a Startup or [Assemb ...
- python_面向对象——封装
1.私有属性 class Person(object): def __init__(self,name,age): self.name = name self.age = age #实例属性 self ...
- Mac---使用tree生成目录结构
作为测试或者程序员,平时都有需求来生成目录树,进行项目层级的讲解等.如下是样式图: 实现方式,即操作步骤: Mac下使用 brew install tree 进行安装,安装后,在terminal中输入 ...