督促自己——某客网编程题三道(Java)——字符串、集合、数组
某客网编程题三道(Java)——字符串、集合、数组
第一题:
题目描述
找出字符串中第一个只出现一次的字符
输入描述:
输入几个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入
asdfasdfo
aabb
复制
o
-1
import java.util.*;
public class Main{public static void main(String[]args){Scanner input=new Scanner(System.in);ArrayList<String>list=new ArrayList<>();while(input.hasNext()){list.add(input.nextLine());}for(String str:list){Map<Character,Integer>map=new HashMap<>();for(int i=0;i<str.length();++i){char x=str.charAt(i);if(!map.containsKey(x)){map.put(x,1);}else{map.put(x,map.get(x)+1);}}boolean flag=false;for(int i=0;i<str.length();++i){char x=str.charAt(i);if(map.get(x)==1){System.out.println(x);flag=true;break;}}if(!flag){System.out.println(-1);}}}
}
基本思路:利用HashMap进行一一映射,找到就个数加一,没有就入Map,最终只需要在Map找个数为一的就行。
为什么选取HashMap?
因为HashMap的增删查改时间复杂度都是O(1)。
第二题:
题目描述
输入n个整数,输出其中最小的k个。
本题有多组输入样例,请使用循环读入,比如while(cin>>)等方式处理
输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组
输出描述:
输出一个从小到大排序的整数数组
示例1
输入
5 2
1 3 5 7 2
输出
1 2
import java.util.*;
public class Main{public static void main(String[]args){Scanner input=new Scanner(System.in);while(input.hasNext()){int n=input.nextInt();int k=input.nextInt();PriorityQueue<Integer>queue=new PriorityQueue<>(new Comparator<Integer>(){public int compare(Integer o1,Integer o2){return o2-o1;}});for(int i=0;i<n;++i){int x=input.nextInt();if(i<k){queue.offer(x);}else{if(x<queue.peek()){queue.poll();queue.offer(x);}}}ArrayList<Integer>list=new ArrayList<>();for(int x:queue){list.add(x);}Collections.sort(list);for(int x:list){System.out.print(x+" ");}System.out.println();}}
}
基本思路:建立一个大根堆,先入上K个值,然后堆顶一定是最大的,所以只需要用堆顶元素和K之后的元素进行比较,堆顶元素大就出堆,然后当前元素入堆,最终堆中剩下的就只有K个最小的元素了,下来就只用排序输出了。
注意:集合当中的PriorityQueue默认建立的是小根堆,所以需要重写比较器。
第三题:
题目描述
输入两个用字符串表示的整数,求它们所表示的数之和。
字符串的长度不超过10000。
本题含有多组样例输入。
输入描述:
输入两个字符串。保证字符串只含有’0’~'9’字符
输出描述:
输出求和后的结果
示例1
输入
9876543210
1234567890
输出
11111111100
import java.util.*;
public class Main{public static void main(String[]args){Scanner input=new Scanner(System.in);ArrayList<String>list=new ArrayList<>();while(input.hasNext()){String str1=input.next();StringBuilder s1=new StringBuilder();s1.append(str1);String str2=input.next();StringBuilder s2=new StringBuilder();s2.append(str2);StringBuilder end=new StringBuilder();while(s1.length()<s2.length()){s1.insert(0,'0');}while(s1.length()>s2.length()){s2.insert(0,'0');}int c=0;for(int i=s1.length()-1;i>=0;i--){char x=s1.charAt(i);char y=s2.charAt(i);int re=(x-'0')+(y-'0')+c;if(re<10){end.insert(0,re);c=0;}else{end.insert(0,re%10);c=1;if(i==0){end.insert(0,c);}}}System.out.println(end.toString());}}
}
基本思路:
由于输入的字符串长度可能很长,Long类型的数的长度也没有多长,所以就排除了通过Integer.valueOf取转化再计算了。那难道没办法了吗?不!其实很简单,只需要对字符串从后往前,一位一位算就可以了,但要考虑清楚是否有进位。每计算一位就连接一位,得到最终结果。
每天督促自己,一起加油!!!!!!!!!!!
同时有更好的做法的,欢迎讨论。
督促自己——某客网编程题三道(Java)——字符串、集合、数组相关推荐
- 牛客网编程题01--计算字符串最后一串单词的长度,单词以空格隔开,字符串小于5000
*题目如下: 代码如下: // CalculateLength.cpp : 定义控制台应用程序的入口点. // 需求:计算字符串最后一串单词的长度,单词以空格隔开,字符串小于5000#include ...
- Python 牛客网编程题输入用例问题
Python 牛客网编程题的输入用例 前言 切入正题 输入字符串 输入整数 输入列表 后记 前言 在牛客网刷题的时候,发现明明在python本地编译器能够轻松解决的输入用例问题,到牛客网在线编译就得好 ...
- 牛客网编程题python_牛客网数据结构练习题
第一次使用牛客做编程题,刚开始不了解如何输入输出,查了查才知道.我用的是语言是 Javascript v8 6.0.0 readline() 表示得到输入的字符串,如果是多行的话,每readline一 ...
- python牛客网编程题_一波优秀的自学编程语言网站
网课已经开设两三个月了 同学们上网课的效果怎么样呢? 特别是学编程的同学 没有了学校的学习氛围 没有了老师面对面教学指导 你是否为了编程而焦头烂额,生无可恋呢? 没事,现在同学们的福利来啦! 下面是给 ...
- python牛客网编程题_【面经】小米软件开发一面(python)面经 2020 2020
作者:JessyTsui https://www.nowcoder.com/discuss/580721?type=2&order=0&pos=15&page=1&ch ...
- 牛客网编程题——合唱团(网易2017)
这题在编程达人面前应该算是水题,但这算是我第一个做出来的动态规划程序,作为纪念,分享一下.题目链接: https://www.nowcoder.com/practice/661c49118ca2419 ...
- 牛客网编程题python输入输出_牛客网算法题目记录
车站建设问题 有10^8个村庄排在一条公路上,依次编号为0~10^8-1,相邻村庄距离为1,其中有n个村庄居住着牛牛,居住着牛牛的村庄从小到大依次为a0~an-1,其中保证a0=0. 现在需要建设车站 ...
- 牛客网 [编程题]数字和为sum的方法数
题目描述: 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数. 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案. 输入描述: 输入为两行:第一行 ...
- 牛客网 [编程题]餐馆
题目描述: 某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数: 有m批客人,每批客人有两个参数:b人数,c预计消费金额. 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消 ...
最新文章
- 全球首条瓷绝缘子自动化生产线:黏土巧造“瓷器活”
- c语言节点导入数据编程,编程小白。用C语言计算SR E2E ARQ模式下节点的数据分析...
- 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
- 支持向量回归 svr
- pythonvim编辑教程_Pycharm学习教程(6) Pycharm作为Vim编辑器使用
- C++没有调用析构函数
- 网上收集的“知乎网”技术方案架构
- JavaScript事件函数监视
- 加州理工学院公开课:机器学习与数据挖掘_神经网络
- ClassPathResource详解
- QT TCP网络编程
- Hadoop 配置文件存放位置
- windows server 2016安装网卡驱动【引用】
- 使用EasyCHM破解版制作CHM帮助文档
- 基于胜任力模型的项目经理岗位培训需求分析研究
- 小程序 input 上传数据库
- 文件同步工具GoodSync简介
- cocoa touch
- 当酒品牌遇上爱“微醺”的年轻人,会擦出怎样的火花?
- 《信号与系统》解读 第1章 信号与系统概述-5:非常重要!!!深入、详细地解读什么基本的复指数信号、IQ信号、欧拉公式?