public class Utils {
//------------------------------------------------------------
// คืนจำนวนข้อมูลในอาเรย์ d ที่มีค่าเท่ากับ x เช่น
// ให้ d = [ 2, 3, 4, 4, 5, 5, 4 ], x = 4
// เมื่อเรียก count(d,x) จะได้ 3 เพราะมี 4 ปรากฏใน d อยู่ 3 ตัว
public static int count(int[] d, int x) {
int count = 0, n = d.length - 1;;
while (n >= 0) {
if (d[n] == x) count++;
n--;
}
return count;
}
//------------------------------------------------------------
// คืนข้อมูลในอาเรย์ d ที่ปรากฏเป็นจำนวนมากสุด เช่น
// ให้ d = [1, 3, 3, 1, 2, 3, 9, 3, 3]
// เมื่อเรียก mode(d) จะได้ 3 เพราะ 3 ปรากฏใน d เป็นจำนวน 5 ตัว ซึ่งเป็นจำนวนมากสุด
// หมายเหตุ : ถ้ามีข้อมูลใน d เกินหนึ่งตัวที่ปรากฏมากสุดเป็นจำนวนเท่ากัน จะคืนตัวใดก็ได้
// และให้ถือว่าอาเรย์ d ที่ได้รับมีขนาดอย่างน้อย 1 ช่อง
public static int mode(int[] d) {
int n = d.length - 1, imode = 0;
while (n >= 0) {
if (count(d, d[n]) > count(d, d[imode])) imode = n;
n--;
}
return d[imode];
}
//------------------------------------------------------------
// ถามว่ามีข้อมูลใดในอาเรย์ d หรือไม่ ที่มีค่าซ้ำ ๆ กันเป็นจำนวนเกินครึ่งของขนาดอาเรย์ เช่น
// ให้ d = [1,0,1,2,1,1,1,1,1,2]
// เมื่อเรียก majority(d) จะคืนค่า true
// แต่ถ้า d = [1,1,1,2,2,3]
// เมื่อเรียก majority(d) จะคืนค่า false เพราะไม่มีข้อมูลใดใน d ที่มีค่าซ้ำกันเกิน 3 ตัว
public static boolean majority(int[] d) {
if (count(d, mode(d)) > d.length / 2) return true;
else return false;
}
//------------------------------------------------------------
// ถ้าต้องการเขียนเมท็อด main เพื่อทดสอบการทำงานของเมท็อดต่่าง ๆ ก็เขียนเพิ่มได้ที่บริเวณนี้
public static void main(String args[]) {
int[] d = { 1,2,3,1,3,3,3,3,3 };
System.out.println(mode(d));
}
//------------------------------------------------------------
}
|