Berikut ini adalah beberapa metode untuk memperkenalkan jumlah nomor array Java kepada Anda. Konten spesifiknya adalah sebagai berikut:
Metode 1:
Penyortiran array, dan kemudian nilai menengah pasti nilai yang dapat ditemukan. Urutkan kompleksitas waktu minimum (sortir cepat) o (nlogn), ditambah traversal.
Metode 2:
Menggunakan metode tabel hash, yaitu, menghitung jumlah kejadian dari masing -masing array dan outputing angka yang kejadiannya lebih besar dari panjang array.
Metode 3:
Jumlah kejadian melebihi setengah dari panjang array, menunjukkan bahwa angka ini muncul lebih banyak dari jumlah angka lainnya.
Pertimbangkan untuk menghapus dua angka yang berbeda setiap kali, jumlah kejadian dalam angka yang tersisa masih melebihi jumlah total. Ulangi proses terus -menerus, mengecualikan angka lain, dan akhirnya temukan angka dengan lebih dari setengah kejadian. Kompleksitas waktu dari metode ini adalah O (n) dan kompleksitas ruang adalah O (1).
Untuk mengubah ide, ini dapat dicapai melalui penghitungan, bukan penghapusan fisik nyata. Selama proses melintasi array, simpan dua nilai, satu adalah angka dalam array dan yang lainnya adalah jumlah kejadian. Ketika melintasi ke nomor berikutnya, jika angka ini sama dengan angka yang disimpan sebelumnya, berapa kali meningkat 1, dan jika berbeda, berapa kali berkurang sebesar 1. Jika jumlah kali yang terakhir, simpan angka berikutnya dan atur nomor yang kita cari. Karena nomor yang kita cari muncul lebih banyak kali daripada jumlah dari semua jumlah lainnya, angka yang kita cari harus menjadi nomor yang ada di nomor 1, nomor yang akan kita cari adalah nomor yang ada di nomor 1, angka yang kita cari.
public int moreHalf (int [] nums) {int result = 0; int count = 1; if (nums.length == 0) return -1; hasil = nums [0]; for (int i = 1; i <nums.length; i ++) {if (count == 0) {hasil = nums [i]; count = 1; lanjutkan; {if (count == 0) {nums = nums [i]; count = 1; lanjutkan; {if count == 0) {nums = nums [i]; count = 1; lanjutkan; {if count == 0) {nums = nums [i]; count = 1; lanjutkan;} {if count == 0) {nums = nums [i]; count = 1; lanjutkan;} {if count == 0) {i nums = i {i if (i nums. hasil;}Metode 4:
Penyortiran barisan cepat yang ditingkatkan, disebutkan sebelumnya, jika array diurutkan, nomor di posisi tengah harus menjadi nilai yang Anda inginkan. Kompleksitas waktu penyortiran array adalah O (nlog (n)), tetapi untuk pertanyaan ini, ada algoritma yang lebih baik yang dapat ditemukan dalam kompleksitas waktu O (n).
Turun dari algoritma penyortiran cepat, metode partisi () adalah metode yang paling penting. Metode ini mengembalikan indeks, yang dapat memastikan bahwa angka pada posisi indeks diurutkan. Angka di sebelah kiri indeks lebih kecil dari angka di mana indeks berada, dan angka di sebelah kanan indeks lebih besar dari angka di mana indeks berada. Maka pertanyaan ini dapat diselesaikan dengan menggunakan ide ini.
Return Index melalui partisi (). Jika indeks == MID, itu berarti bahwa median array telah ditemukan; Jika indeks, itu berarti median adalah antara [mulai, indeks-1]. Saya tahu bahwa akhir dari indeks == loop tengah diperoleh.
public int Partition(int[] nums,int start,int end){int pivotkey = nums[start];int origin = start;while(start<end){while(start<end&&nums[end]>=pivotkey) end--;while(start<end&&nums[start]<pivotkey) start++;swap(nums,start,end);} swap (nums, start, end); swap (nums, end, end); return end;} p int [] swap (int [] ints, int x, int y) {int temp = ints [x]; ints [x] = ints [y]; ints [y] = temp; pengembalian ints; } public int MoreThanHalf(int[] nums){if(nums.length==0)return -1;int start = 0;int end = nums.length-1;int index = Partition(nums, start, end);int mid = nums.length/2;while(index!=mid){if(index>mid)//If the index obtained after adjusting the array is greater than middle, continue to adjust the array index of start to index-1 section = Partisi (nums, start, index-1); else {// sebaliknya menyesuaikan indeks array indeks+1 ke bagian akhir = partisi (num, indeks+1, end);}} return num [index];}Konten di atas memperkenalkan konten yang relevan dari kode Java yang mengimplementasikan angka yang muncul lebih dari setengah kali dalam suatu array. Saya harap ini akan membantu semua orang!