这是我参与「第七届青训营 」伴学笔记创作活动的第5天
今天的代码练习题目是:
找出整型数组中占比超过一半的数
问题描述
- 给定一个长度为n的整型数组,已知其中一个数字的出现次数超过数组长度的一半,找出这个元素
输入格式
- 一个长度为n的数组,其中某个元素的出现次数大于n/2
输出格式
- 一个整数
输入样例
- [1,3,8,2,3,1,3,3,3]
输出样例
- 3
数据范围
- 任意长度为n整数数组,其中某个元素的出现次数大于n/2
题目解析
其实就是找出出现次数超过一半的数,首先通过快排将数组拍成有序的,然后取有序的中间那个数就可以,因为是大于一半的,就算是极限情况从头或者从尾开始,中间那个数也是出现一半以上的,更不用说其他在中间的情况了
代码如下:
import java.util.Arrays;
public class Main { // Correct quick sort function public static void quickSort(int l, int r, int[] num) { if (l >= r) return; int mid = num[(l + r) / 2]; // Choose pivot element int i = l - 1, j = r + 1; while (i < j) { do i++; while (num[i] < mid); do j--; while (num[j] > mid); if (i < j) { // Swap elements int temp = num[i]; num[i] = num[j]; num[j] = temp; } } quickSort(l, j, num); quickSort(j + 1, r, num); }
// Modified solution function, returning the element that appears more than half the time
public static int solution(int[] list) {
quickSort(0, list.length - 1, list);
return list[(list.length - 1) / 2]; // Return the median element
}
public static void main(String[] args) {
// Test cases
System.out.println(solution(new int[]{1, 3, 8, 2, 3, 1, 3, 3, 3}) == 3); // Should print true
}
}
学习方法与心得
今天我的分享是:编程,代码世界的奇妙冒险
编程就像一场神奇的冒险,每一行代码都是打开新关卡的钥匙。
当我第一次敲下那些字符,就像是在一张白纸上绘制神秘的魔法阵。看着程序按照自己的想法运行起来,那种感觉就像创造了一个新的小世界。比如,编写一个简单的小游戏,让小方块在屏幕上跳跃,每一次成功的移动都是我的魔法生效啦!
编程也是和电脑斗智斗勇的过程。有时候,代码里一个小小的标点符号错误,就像调皮的小精灵在捣乱,让整个程序崩溃。我会像侦探一样,在那密密麻麻的代码里寻找蛛丝马迹,当找到问题并修复时,那种成就感无与伦比,仿佛抓住了小恶魔。
在这个过程中,我还结识了一群“代码朋友”,也就是开源社区的小伙伴们。大家分享自己的代码片段,就像交换神奇的魔法咒语。我从别人那里学到了简洁高效的“咒语”,也把自己的创意分享出去。
而且,编程让我懂得了坚持的意义。遇到复杂的算法和难题,就像面对一座巨大的迷宫,但只要一步一步耐心走,总会找到出口。编程就是这样,充满乐趣、挑战和惊喜,它带着我在数字世界中自由翱翔,每一次编程都是一次全新的奇妙旅程。