难度:简单
给定一个大小为
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
相关推荐
C#Thread22 分钟前
机器视觉--Halcon的数据结构(数组)垠二2 小时前
L2-4 寻宝图东方芷兰4 小时前
算法笔记 04 —— 算法初步(下)JNU freshman4 小时前
图论 之 迪斯科特拉算法求解最短路径青松@FasterAI5 小时前
【NLP算法面经】本科双非,头条+腾讯 NLP 详细面经(★附面题整理★)旅僧5 小时前
代码随想录-- 第一天图论 --- 岛屿的数量Emplace5 小时前
ABC381E题解一个 00 后的码农5 小时前
25轻化工程研究生复试面试问题汇总 轻化工程专业知识问题很全! 轻化工程复试全流程攻略 轻化工程考研复试真题汇总若兰幽竹6 小时前
【机器学习】衡量线性回归算法最好的指标:R Squared刘小炮吖i6 小时前
Java基础常见的面试题(易错!!)