|
11 | 11 | */ |
12 | 12 | public class PracticeTest { |
13 | 13 |
|
| 14 | + /** 2024-12-23 |
| 15 | + * 轮转数组 |
| 16 | + * 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 |
| 17 | + * 示例 1: |
| 18 | + * 输入: nums = [1,2,3,4,5,6,7], k = 3 |
| 19 | + * 输出: [5,6,7,1,2,3,4] |
| 20 | + * 解释: |
| 21 | + * 向右轮转 1 步: [7,1,2,3,4,5,6] |
| 22 | + * 向右轮转 2 步: [6,7,1,2,3,4,5] |
| 23 | + * 向右轮转 3 步: [5,6,7,1,2,3,4] |
| 24 | + * 示例 2: |
| 25 | + * 输入:nums = [-1,-100,3,99], k = 2 |
| 26 | + * 输出:[3,99,-1,-100] |
| 27 | + * 解释: |
| 28 | + * 向右轮转 1 步: [99,-1,-100,3] |
| 29 | + * 向右轮转 2 步: [3,99,-1,-100] |
| 30 | + * 个人思路:(未通过,有一个测试用例超时)循环k次,每次循环取出数组最后一位,其他数据往后移动一位,再把最后一位放到数组最前面 |
| 31 | + * 官方思路:使用一个新数组存储 循环k次 放到新数组的 (i + k) % n 位置 |
| 32 | + */ |
| 33 | + |
| 34 | + @Test |
| 35 | + public void practice6() { |
| 36 | + // 输入: nums = [1,2,3,4,5,6,7], k = 3 |
| 37 | + int[] nums = {1,2,3,4,5,6,7}; |
| 38 | + int k = 54944; |
| 39 | + // 具体逻辑 |
| 40 | + for (int i = 0; i < k; i++) { |
| 41 | + int lastData = nums[nums.length - 1]; |
| 42 | + for (int j = nums.length - 1; j > 0; j--) { |
| 43 | + nums[j] = nums[j - 1]; |
| 44 | + } |
| 45 | + nums[0] = lastData; |
| 46 | + } |
| 47 | + // 官方解法 |
| 48 | + int n = nums.length; |
| 49 | + int[] newArr = new int[n]; |
| 50 | + for (int i = 0; i < n; ++i) { |
| 51 | + newArr[(i + k) % n] = nums[i]; |
| 52 | + } |
| 53 | + System.arraycopy(newArr, 0, nums, 0, n); |
| 54 | + |
| 55 | + System.out.println(Arrays.toString(nums)); |
| 56 | + |
| 57 | + } |
| 58 | + |
| 59 | + |
14 | 60 | /** 2024-12-11 |
15 | 61 | * 多数元素 |
16 | 62 | * 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 |
17 | 63 | * 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 |
18 | 64 | * |
19 | | - * 思路:双层遍历,数组中的每个元素从角标0开始计数,超过阈值直接记录。 |
| 65 | + * 思路:(效果不如官方)双层遍历,数组中的每个元素从角标0开始计数,超过阈值直接记录。 |
20 | 66 | * 官解地址:https://leetcode.cn/problems/majority-element/solutions/?envType=study-plan-v2&envId=top-interview-150 |
21 | 67 | */ |
22 | 68 | @Test |
|
0 commit comments