难度:简单
给定一个大小为
n
的数组nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
**进阶:**尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
思路:采用两两相消的方法,因为多数元素出现的次数是大于n/2的,所以只要两两不相等的元素相消,剩下的那个元素就肯定是多数元素了代码:
javaclass Solution { public int majorityElement(int[] nums) { int more = nums[0]; int count = 1; for(int i = 1; i < nums.length;i++ ){ if(more == nums[i]) { count++; }else if(count == 0) { more = nums[i]; count++; }else { count--; } } return more; } }
运行结果:
难度:中等
相关企业
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100]
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
进阶:
- 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
- 你可以使用空间复杂度为
O(1)
的 原地算法解决这个问题吗?
思路:翻转三次,如图所示代码:
javaclass Solution { public void reverse(int[] nums,int left,int right){ while(left < right){ int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; left++; right--; } } public void rotate(int[] nums, int k) { int length = nums.length; k%=length; reverse(nums,0,length-1); reverse(nums,0,k-1); reverse(nums,k,length-1); } }
运行结果:
LeetCode面试经典150题(day 3)
用bug解决bug2023-08-27 16:34
相关推荐
karmueo461 小时前
视频序列和射频信号多模态融合算法Fusion-Vital解读写代码的小球4 小时前
求模运算符c大千AI助手8 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法YuTaoShao9 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转生态遥感监测笔记9 小时前
GEE利用已有土地利用数据选取样本点并进行分类Tony沈哲10 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南刘海东刘海东10 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)独行soc11 小时前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)pumpkin8451411 小时前
Rust 调用 C 函数的 FFI