---hashMap --- 按value排序
// map排序
public static void sortMap(Map<String,Integer> map){
List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet());
// list.sort
list.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
// Collections.sort
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Integer>entry :list){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
-----骰子翻转----
骰子有6个面,现在用1,2,3,4,5,6分别代表一个骰子的左,右,前,后,上,下的初始位置,用R代表向右滚动一次,用L代表向左滚动一次,可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向右翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示逆时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态。
import com.alibaba.fastjson.JSONObject;
// 筛子翻转
public class Shaizifanzhuan {
// 数组排序
public static void main(String[] args) {
int[] arrs= {0,1,2,3,4,5};
System.out.println("-"+JSONObject.toJSONString(arrs));
System.out.println(JSONObject.toJSONString(paixu(arrs,"R")));
}
public static int[] paixu (int[] nums,String str){
// nums = [0,1,2,3,4,5] 左右前后上下
int[] result = new int[6];
switch (str){
case "R": // 右
result[0]=nums[5];
result[1]=nums[4];
result[2]=nums[2];
result[3]=nums[3];
result[4]=nums[2];
result[5]=nums[0];
break;
case "L": // [0,1,2,3,4,5] 左右前后上下
result[0]=nums[4];
result[1]=nums[5];
result[2]=nums[2];
result[3]=nums[3];
result[4]=nums[1];
result[5]=nums[0];
break;
case "F": //前 // nums = [1,2,3,4,5,6] 左右前后上下
result[0]=nums[0];
result[1]=nums[1];
result[2]=nums[4];
result[3]=nums[5];
result[4]=nums[3];
result[5]=nums[2];
break;
case "B": // 后 [0,1,2,3,4,5] 左右前后上下
result[0]=nums[0];
result[1]=nums[1];
result[2]=nums[5];
result[3]=nums[4];
result[4]=nums[2];
result[5]=nums[3];
break;
case "A": //逆时针 [0,1,2,3,4,5] 左右前后上下
result[0]=nums[3];
result[1]=nums[2];
result[2]=nums[0];
result[3]=nums[1];
result[4]=nums[4];
result[5]=nums[5];
break;
case "C": // [0,1,2,3,4,5] 左右前后上下
result[0]=nums[2];
result[1]=nums[3];
result[2]=nums[1];
result[3]=nums[0];
result[4]=nums[4];
result[5]=nums[5];
break;
}
return result;
}
}
-----判断牌型-------
五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一。 判断牌型:
* 牌型1,同花顺:同一花色的顺子,如红桃2红桃3红桃4红桃5红桃6。
* 牌型2,四条:四张相同数字 + 单张,如红桃A黑桃A梅花A方块A + 黑桃K。
* 牌型3,葫芦:三张相同数字 + 一对,如红桃5黑桃5梅花5 + 方块9梅花9。
* 牌型4,同花:同一花色,如方块3方块7方块10方块J方块Q。
* 牌型5,顺子:花色不一样的顺子,如红桃2黑桃3红桃4红桃5方块6。
* 牌型6,三条:三张相同 + 两张单。
* 牌型7,其他。
* 说明:
* 1)五张牌里不会出现牌大小和花色完全相同的牌。
* 2)前面的牌型比后面的牌型大,如同花顺比四条大,依次类推。
*/
import org.apache.ibatis.annotations.Case;
import java.util.*;
// 判断牌型
public class Panduanpaixing {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("1 红");
list.add("2 a");
list.add("2 b");
list.add("2 c");
list.add("5 红");
System.out.println(getType(list));
}
// J 红 , 1 黑 ,J 红 , 1 黑 ,J 红 ,
public static int getType(ArrayList<String> list){
int type = 0;
List<Integer> listNumber = new ArrayList<>();
List<String> listColor = new ArrayList<>();
Set<Integer> setNum = new TreeSet<>();
Set<String> setColor = new TreeSet<>(); // 颜色相同 一个值
Map<String,Integer> map = new HashMap<>(); // 数字 数显的频率
list.stream().forEach(str->{
String [] strs = str.split(" ");
String strNumber = strs[0] ;
String strColor = strs[1];
if(map.containsKey(strNumber)){
map.put(strNumber,map.get(strNumber)+1);
}else{
map.put(strNumber,1);
}
switch (strNumber){
case "J":
listNumber.add(11);
setNum.add(11);
break;
case "Q":
listNumber.add(12);
setNum.add(12);
break;
case "K":
listNumber.add(13);
setNum.add(13);
break;
case "A":
listNumber.add(1);
setNum.add(1);
break;
default:
listNumber.add(Integer.parseInt(strNumber));
setNum.add(Integer.parseInt(strNumber));
}
listColor.add(strColor);
setColor.add(strColor);
});
// 判断同花 4
if(setColor.size()==1){ //同花
//判断同花顺 1
if(setNum.size()==5 ){
if(isShun(listNumber)){
type = 1; // 同花顺
}
}else{
type = 4; //同花
}
}
// 顺子 5
if(setColor.size()!=1){
if(setNum.size()==5){
if(isShun(listNumber)){
type = 5;
}
}
}
// 三条6 四条2 葫芦3
if(setNum.size()==3){ // 22 33 1; 333 1 2
if(map.containsValue(3)){
type = 6;
}
}
if(setNum.size()==2){ // 1111 2; 11 333
if(map.containsValue(3)){
type = 3;
}
if(map.containsValue(4)){
type = 2;
}
}
return type;
}
public static boolean isShun(List<Integer> listNumber){ // 顺子
boolean isThs = true;
for(int i =1;i<5;i++){
if(listNumber.get(i)!=listNumber.get(i-1)+1){
isThs = false;
}
}
return isThs;
}
}
-----按照字母个数排序-------
给定长度小于100的一个字符串,区分大小写的情况下统计其中字母的个数,并按照由大到小的顺序输出.当字母个数一样时,按照把先出现的字母放在前面.当字符串中没有字母时,则不要输出.
举例:
输入:
abbbdcdc123
输出:
b=3
d=2
c=2
a=1
package utils.huawei;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
// 最多字母次数 排序输出
public class Zuigaocishuzimu {
public static void main(String[] args) {
sort("aabbbdcdc123");
}
public static void sort(String str){ //abbbdcdc123
Map<Character,Integer> map = new LinkedHashMap<>();
Set<Character> set = new HashSet<>();
// hashMap根据 values排序
for(char cha : str.toCharArray()){
if(cha>='A'&&cha<='z'){
if(map.containsKey(cha)){
map.put(cha,map.get(cha)+1) ; // a1 b3 d2 c2
}else {
map.put(cha, 1);
}
// set.toArray();
}
}
System.out.println(JSONObject.toJSONString(map));
char [] chars = new char[map.size()];
int [] nums = new int[map.size()];
int i =0;
Object o = map.keySet().toArray()[0];
Object a = map.values().toArray()[0];
chars[0] = (char)o;
nums[0] = (int) a;
for(Map.Entry<Character,Integer> entry: map.entrySet()){
char ch = entry.getKey();
Integer num= entry.getValue();
chars[i]=ch; //a
nums[i]=num; //1 根据num排序 3 i-1:2
int j = i; // 0
while( j>0&&nums[j]>nums[j-1]){ // 交换j 到合适的地方
int tempNum = nums[j];
char tempChar = chars[j];
chars[j]= chars[j-1];
chars[j-1] = tempChar;
nums[j] =nums[j-1];
nums[j-1] = tempNum;
}
i++;
}
System.out.println(chars);
for(int s =0;s<=chars.length-1;s++){
System.out.println(chars[s]+" "+nums[s]);
}
}
// map排序
public static void sortMap(Map<String,Integer> map){
List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet());
// list.sort
list.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
// Collections.sort
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Integer>entry :list){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
--------消除重复数字的最大整数------------------
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
// 消除重复数字的最大整数
public class MostBig {
public static void main(String[] args) {
mostBig(new BigInteger("2134123745971246890123064"));
}
public static void mostBig(BigInteger data){
String str = data+"";
char[] chars = str.toCharArray();
Arrays.sort(chars);
Map<String,Integer> map = new HashMap<>();
for(int i=chars.length-1;i>=0;i--){
char cha = chars[i];
if(!map.containsKey(cha+"")){
System.out.print(cha);
map.put(cha+"",1);
}
}
}
}
-------------------牛客网小题汇总-------
import com.alibaba.fastjson.JSONObject;
import java.util.*;
public class Main {
// 子串的最长路径查找
public static void zichuanlujing(String [] strs){
Arrays.sort(strs);
Arrays.stream(strs).forEach(str-> System.out.println(str));
}
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
while(scanner.hasNext()){
String [] strs = new String[num];
for(int i =0;i<num;i++){
strs[i] = scanner.next();
}
System.out.println(JSONObject.toJSONString(strs));
zichuanlujing(strs);
}
// 字符串反转
// Scanner scanner = new Scanner(System.in);
// String str = scanner.nextLine();
// char [] strs = str.toCharArray();
// StringBuffer stringBuffer = new StringBuffer();
// for(int i=0;i<strs.length;i++){
// stringBuffer.append(strs[strs.length-i-1]);
// }
// System.out.println(stringBuffer);
//合并表记录
// Scanner scanner = new Scanner(System.in);
// Map<Integer,Integer> map = new TreeMap<>();
// while(scanner.hasNext()){
// int lenth = scanner.nextInt();
// while(lenth-->0){
//
// int key = scanner.nextInt();
// int value = scanner.nextInt();
// if(map.containsKey(key)){
// map.put(key,value+map.get(key));
// }else{
// map.put(key,value);
// }
// }
// for(Map.Entry<Integer,Integer> entry :map.entrySet()){
// System.out.println(entry.getKey()+" "+entry.getValue());
// }
// }
// System.out.println(isZhishu(3));
// while(scanner.hasNext()){
// String str1 = scanner.nextLine().replaceAll(" ","");
// String str2 = scanner.nextLine().replaceAll(" ","");
// ArrayList a1 = strSplit(str1);
// ArrayList a2 = strSplit(str2);
// a1.stream().forEach(str-> System.out.println(str));
// a2.stream().forEach(str-> System.out.println(str));
// }
}
//句子反转
public static String reserse(String str){
String []strs = str.split(" ");
StringBuffer result = new StringBuffer();
for(int i =strs.length-1;i>=0;i--){
if(i==0){
result.append(strs[i]);
}else{
result.append(strs[i]+" ");
}
}
return result.toString();
}
// 数字颠倒
public static void shuzidiandao(int data){
char[] chars = (data+"").toCharArray();
for(int i=chars.length-1;i>=0;i--){
System.out.print(chars[i]);
}
}
// 重复字符最长串 aaaaabbbbaaccccc
public static String maxRepeat(String str){
if(str.length()==1){
return str;
}
char[] chars = str.toCharArray();
String temp = str.substring(0,1);
int start = 1;
int end = 1;
Map<Integer,Integer> map = new HashMap<>(); // key 开始,value 结束
for(int i=1;i<chars.length;i++){ // 分割数组
if(chars[i]!=chars[i-1]){ // 不相等分割
// end = i;
if((end-start)>temp.length()||(end-start)==temp.length()&&temp.charAt(0)>chars[i]){ // 长度小于 或者accis吗小于
temp = str.substring(start,end);
}
if(temp.length()==1){ // 单独 a b c
if(chars[i]<chars[i-1]){
temp = chars[i]+"";
}
}
start = i;
end = i;
}else{
end = i;
// 判断是最后一个串, 则需要重新判断temp
if(i==chars.length-1){
String s = str.substring(start,end);
System.out.println("-"+s);
if(s.length()>temp.length()||s.charAt(0)<temp.charAt(0)){
temp = s;
}
}
}
}
return temp;
}
// 重复字符排序 ABCDAB -> AB
public static void chongfuzifupaixu(String str){
Map<Character ,Integer> map = new TreeMap<>();
char [] chars = str.toCharArray();
for(int i=0;i<chars.length;i++){
if(map.containsKey(chars[i])){
map.put(chars[i],map.get(chars[i])+1);
}else{
map.put(chars[i],1);
}
}
for(Map.Entry<Character,Integer> entry:map.entrySet()){
if(entry.getValue()>1){
System.out.print(entry.getKey());
}
}
}
// 计算字符个数
public static int zifugeshu(String str){
char [] chars = str.toCharArray();
Set<Character> set = new HashSet<>();
for(int i=0;i<chars.length;i++){
if(chars[i]>=0&&chars[i]<=127){
set.add(chars[i]);
}
}
return set.size();
}
// 提取不重复的整数
public static void getbuchongfu(int data){
Set<String> set = new TreeSet();
String str = data+"";
for(int i=str.length()-1;i>=0;i--){
if(!set.contains(""+str.charAt(i))){
set.add(""+str.charAt(i));
System.out.print(str.charAt(i));
}
}
}
// 链表操作
// 二叉树 先序遍历 非递归
public static void treeBianli(TreeNode treeNode){
Stack<TreeNode> stack = new Stack<>();
while(treeNode!=null||!stack.isEmpty()){
while(treeNode.left!=null){
System.out.println(treeNode.val);
stack.push(treeNode);
treeNode = treeNode.left;
}
if(stack!=null){
treeNode = stack.pop();
treeNode = treeNode.right;
}
}
}
// 二叉树遍历 递归
public static void xianxuBian(TreeNode treeNode){
System.out.println(treeNode.val);
if(treeNode.left!=null){
xianxuBian(treeNode.left);
}
if(treeNode.right!=null){
xianxuBian(treeNode.right);
}
}
// 快排序
public static void quickSort(int []numbers,int start,int end ){
if(start<end){
int base = numbers[start];// 基数
int temp ;
int i = start ;
int j =end;
do{
while(numbers[i]>=base&&i<end){
i++;
}
while(numbers[j]<=base&& j>start){
j--;
}
// 交换
if(i<=j){
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}while(i<j); // 找到base 位置, 左边比它小,右边比它大
numbers[start] = numbers[i]; // base位置变换
numbers[i] = base;
quickSort(numbers,start,i-1);
quickSort(numbers,i+1,end);
}
}
// 取近似值
public static int getJinshizhi(float data){
String str = new String (data+"");
String[] strs = str.split(".");
if(strs.length==2){
if(Integer.parseInt(strs[1])>=5){
return Integer.parseInt(strs[0])+1;
}
}
return Integer.parseInt(strs[0]);
}
public static int getJinshizhi2(float f){
int i = (int)f;
i = (f-i)>=0.5?++i:i;
return i;
}
// 质数因子
public static String getZhishuResult(long data){
StringBuffer result = new StringBuffer("");
int i = 2;
while(data-->0){
if(data%i==0&&isZhishu(i)){ //因数
result.append(i+" ");
i++;
}
}
return result.toString();
}
// 质数因子2
public static void zhishuyinzi(long data){
while(data!=1){
for(int i =2;i<data;i++){
if(data%i==0){
System.out.println(i+" ");
data =data/i;
break;
}
}
}
}
public static void canculate(long num){
for(long i=2;i<=num;i++){
if(num%i==0){
System.out.print(i+" ");
canculate(num/i);
return;
}
}
}
// 判断是否为质数
public static boolean isZhishu(long data){
boolean result = true;
int i =2;
while(data-->0&&i<data){
if( data%(i++)==0){
result = false;
break;
}
}
return result;
}
// 输入十六进制 -》 十进制
public static int shiliu(String str){
return Integer.parseInt(str.substring(2),16);
}
// 字符串分割
public static ArrayList<String> strSplit(String str){
ArrayList<String> arrayList = new ArrayList<>();
while(str.length()>=8){
arrayList.add(str.substring(0,8));
str = str.substring(8);
}
StringBuffer last = new StringBuffer(str);
for(int i=0;i<8- str.length();i++){
last.append("0");
}
arrayList.add(last.toString());
// arrayList.toArray(new String [0]); 返回数组
return arrayList;
}
// 数组去重排序
public static int[] quchongpaixu (int [] arr){
// 排序
for(int i=0;i<arr.length-1;i++){
boolean isSorted = true;
for(int j =0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSorted = false;
}
}
if(isSorted){
break;
}
}
// 去重
ArrayList<Integer> arrayList = new ArrayList();
arrayList.add(arr[0]);
for(int i:arr){
if(arrayList.get(arrayList.size()-1)!=i){
arrayList.add(i);
}
}
Integer[] result = new Integer[arrayList.size()];
return arrayList.stream().mapToInt(Integer::intValue).toArray();
}
// 数组包含
public static int numHas(String str1,String target){
int num =0;
for(char ch : str1.toCharArray()){
if(ch==target.charAt(0)|| ch== target.toUpperCase().charAt(0)||ch == target.toLowerCase().charAt(0)){
num++;
}
}
return num;
}
public static int lent(String str){
String [] strs = str.split(" ");
return strs[strs.length-1].length();
}
}
class Node{
String str ;
Node next ;
public Node getNext() {
return next;
}
public String getStr() {
return str;
}
public void setNext(Node next) {
this.next = next;
}
public void setStr(String str) {
this.str = str;
}
}
class TreeNode{
int val;
TreeNode left;
TreeNode right;
}
--------3水瓶子换一瓶水-----------
import java.util.Scanner;
public class Qishiping {
int sum =0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int in = scanner.nextInt();
if(in==0){
break;
}
if(in==1){
System.out.println(0);
}
if(in==2){
System.out.println(1);
}
System.out.println(h(in));
// int c = in%3; //
// if(in%3==2){ // 喝完,剩下2个 +1
// int b = (int)in/3;
// sum+=b; //
// (b+c)%3
// }
}
}
static int h(int n){
if(n<2){
return 0;
}
int a = n%3; // 59/3 19 2
if(n==2){
return 1; // 借一瓶
}
int b = n/3; // 19
return b+h(b+a);
}
}