คัดลอกรหัสรหัสดังต่อไปนี้:
-
* ชื่อ: ค้นหาจำนวนและจำนวนการซ้ำขององค์ประกอบในอาร์เรย์ที่มีมากที่สุด
* คำอธิบาย:
* องค์ประกอบในอาร์เรย์สามารถทำซ้ำได้ วิธีนี้สามารถค้นหาตัวเลขที่มีการซ้ำซ้อนมากที่สุดและส่งคืนจำนวนครั้งที่ทำซ้ำได้
* แต่คุณต้องรู้ว่าองค์ประกอบที่ใหญ่ที่สุดในอาร์เรย์นี้คืออะไร หากคุณไม่สามารถระบุได้ มันจะเป็นโศกนาฏกรรม ~
-
* @param อาร์เรย์เป้าหมายอาร์เรย์;
* ค่าสูงสุดของข้อมูลในอาร์เรย์สูงสุด
* @return ส่งคืนคอลเลคชันแผนที่ที่มีตัวเลขที่มีการซ้ำซ้อนมากที่สุด (ค่า) และจำนวนการซ้ำซ้อน (maxCount)
* เกิดข้อยกเว้นภายในและส่งคืนค่า 0 ตามค่าเริ่มต้น
* @พ่น
* @ผู้เขียน หยาง หยวน
-
แผนที่สาธารณะ <String, Integer> arraySearch (int [] array, int max) {
//รวบรวมผลลัพธ์
แผนที่<String, Integer> resultMap = ใหม่ HashMap<String, Integer>();
//จำนวนการทำซ้ำ
int maxCount = 0;
//หมายเลขที่มีจำนวนการซ้ำมากที่สุด
ค่า int = 0;
พยายาม{
//เตรียมใช้งานอาร์เรย์ข้อมูลเพื่อจัดเก็บจำนวนครั้งของแต่ละองค์ประกอบ
int[] dataArray = ใหม่ int[สูงสุด+1];
//สำรวจอาร์เรย์ที่จะพบ ใช้แต่ละองค์ประกอบเป็นตัวห้อย ค้นหาอาร์เรย์ข้อมูลโดยตรง และดำเนินการ +1 เพื่อระบุว่าปรากฏครั้งเดียว
สำหรับ (int i : array) {
ข้อมูลอาร์เรย์[i]++;
-
//ค้นหาค่าสูงสุดในอาร์เรย์ข้อมูล
สำหรับ(int i=0;i<dataArray.length;i++){
ถ้า(dataArray[i]>maxCount){
maxCount=dataArray[i];
ค่า=ฉัน;
-
-
} จับ (ข้อยกเว้นจ) {}
resultMap.put("maxCount", maxCount);
resultMap.put("ค่า", ค่า);
ส่งคืนผลลัพธ์แผนที่;
-
-
* ชื่อ: เปรียบเทียบขนาดของสองสาย
* คำอธิบาย: กฎการเปรียบเทียบสอดคล้องกับลำดับตามผลในฐานข้อมูล
* Null จะถูกแปลงเป็นค่าว่างโดยอัตโนมัติ และสตริงว่างจะมีค่ามากที่สุด
-
* @param first สตริงแรกที่จะเปรียบเทียบ;
* วินาที สตริงที่สองที่จะเปรียบเทียบ;
* @return first มากกว่าวินาทีและส่งคืนค่าจำนวนบวก
* อันแรกเท่ากับวินาทีและส่งกลับ 0;
* ค่าแรกน้อยกว่าวินาทีและส่งคืนค่าจำนวนลบ
* ข้อยกเว้นภายในส่งคืน 0 โดยค่าเริ่มต้น
* ค่าที่ส่งคืนไม่ใช่ค่าคงที่~~;
* @พ่น
* @ผู้เขียน หยาง หยวน
-
int สาธารณะคงที่ comparisonString (สตริงแรก, สตริงที่สอง) {
ผลลัพธ์ int = 0;
พยายาม{
//null เพื่อว่างเปล่า
ครั้งแรก = ครั้งแรก==null?"":ครั้งแรก;
วินาที = วินาที ==null?"": วินาที;
//บันทึกความยาวสตริงไว้ล่วงหน้าเพื่อหลีกเลี่ยงการอ่านซ้ำ
int firstLength=first.length();
int SecondLength=วินาที.ความยาว();
//จัดการกรณีพิเศษที่มีสตริงว่าง
if("".equals(first) || "".equals(second)){
//ใครสูงกว่าใครตัวเล็ก?
ผลลัพธ์ = SecondLength-FirstLength;
}อื่น{
//พื้นที่ชั่วคราวที่ใช้เก็บผลรวมของรหัส ASCII
int นับแรก = 0;
int วินาทีนับ = 0;
// ใช้การดำเนินการล้วนๆ เพื่อค้นหาตัวเลขที่น้อยกว่าจากตัวเลขสองตัว ซึ่งจริงๆ แล้วคือ bt
int minLength = (secondLength*(firstLength/secondLength) + firstLength*(secondLength/firstLength))/(firstLength/secondLength + SecondLength/firstLength);
//ตัดทีละบิตตามจำนวนหลักที่สั้นกว่าในสองสายเพื่อป้องกันการอยู่นอกขอบเขต
สำหรับ(int i=0;i<minLength;i++){
// ค้นหาผลรวมของรหัส ASCII
firstCount+=first.substring(i,i+1).getBytes()[0];
SecondCount+=second.substring(i,i+1).getBytes()[0];
//ผลรวมไม่เท่ากันแสดงว่าเปรียบเทียบขนาดแล้ว
ถ้า(firstCount!=secondCount){
หยุดพัก;
-
-
ถ้า(firstCount==วินาทีนับ){
//ความยาวมันยาวเกินไป
ผลลัพธ์ = firstLength-secondLength;
}อื่น{
//ผลรวมมีขนาดใหญ่ที่สุด
ผลลัพธ์ = firstCount-secondCount;
-
-
} จับ (ข้อยกเว้นจ) {}
ส่งคืนผลลัพธ์;
-