本文主要是介绍【笔试】虾皮2022秋招提前批SER笔试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、重排字符串和数字
思路:就按照题目要求来写就好了,有一点需要注意的是,再对数字排序时候要考虑最极端的情况可能出现100位左右的数字,这个只能String存了,看到别人Long也过了,但应该是数据不严。排序时候由于是String,因此重新定义排序规则。
代码:
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param text_source string字符串 原始输入* @return string字符串*/public String char_and_num_return (String text_source) {text_source = text_source.replaceAll(" +"," ").trim(); if(text_source == null || text_source == "") return text_source;StringBuilder res = new StringBuilder();String []strs = text_source.split(" ");List<String> digist = new ArrayList<>();for(String str : strs){if(str.isEmpty() || str==" ") continue;if(str.charAt(0)>='0' && str.charAt(0)<='9'){digist.add(str);}else{res.append(str);res.append(" ");}}Collections.sort(digist,(a,b)->{if(a.length()==b.length()) return a.compareTo(b);return a.length()-b.length();});for(String str : digist){res.append(str);res.append(" ");}return res.toString().trim();}
}
2、成对的69
思路:类似括号匹配,用一个栈记录6,每遇到一个9则出栈一个6,如果此时没有6,就在前面插入一个6,最后看下栈中剩余多少6,就往最后插入多少个9。
代码:
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param S string字符串 * @return string字符串*/public String Paired69 (String S) {StringBuilder res = new StringBuilder();Stack<Character> s = new Stack<>();for(char c : S.toCharArray()){if(c=='6'){ //遇到6就push进栈s.push(c);}else{ //遇到9就出栈一个6,没有6则在前面插入6if(!s.isEmpty()) s.pop();else res.insert(0,'6');}res.append(c);}while(!s.isEmpty()){ //最后剩余的6往后面补9s.pop();res.append('9');}return res.toString();}
}
3、最小金额购买商品
思路:初始化两个数组记录每个位置花费的代价,正着找一遍连续上升序列的花费,再反正求一遍连续上升的序列花费,花费是记录在前缀和中的,最后对每个位置上的花费取最大值,累加所有的位置即可。至于取最大值,是因为一个位置需要同时考虑左右两边带来的影响,正着求的是上升,反正求的还是上升。
代码:
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param array int整型一维数组 * @return int整型*/public int cost (int[] array) {int f[] = new int[array.length];int r[] = new int[array.length];for(int i=0;i<array.length;i++){f[i]=1;r[i]=1;}for(int i=1;i<array.length;i++){if(array[i]>array[i-1]){f[i] = f[i-1]+1;}}for(int i=array.length-2;i>=0;i--){if(array[i]>array[i+1]){r[i]=r[i+1]+1;}}int res=0;for(int i=0;i<array.length;i++){res+=Math.max(r[i],f[i]);}return res;}
}
这篇关于【笔试】虾皮2022秋招提前批SER笔试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!