力扣面试经典150题day3第五题(lc69),第六题(lc189)

文章目录


一、lc169

1.排序做法

因为众数的定义为出现次数大于(n/2),所以数组长度一半位置的元素一定为众数,可以不用进行遍历计数,统计出众数(不用排序也计数统计出众数,但需要利用map保存是哪个元素的数目,排序后不需要,所有相同的元素排在一起了,只需遍历完一个元素的数目后,与n/2进行比较即可)

java 复制代码
class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}

2.灵神做法 打擂台

nums0先做为擂主,初始血量为1,遍历后面元素,遇到同门(相同元素),血量加1,遇到对手(不同元素),血量减1,当血量为0时,换当前位置元素为擂主,遍历完后擂主的为众数。严格证明可以看代码下面的链接

java 复制代码
class Solution {
    public int majorityElement(int[] nums) {
        int ans = 0;
        int hp = 0;
        for (int x : nums) {
            if (hp == 0) { // x 是初始擂主,生命值为 1
                ans = x;
                hp = 1;
            } else { // 比武,同门加血,否则扣血
                hp += x == ans ? 1 : -1;
            }
        }
        return ans;
    }
}

作者:灵茶山艾府
链接:https://leetcode.cn/problems/majority-element/solutions/3744717/on-mo-er-tou-piao-fa-yan-jin-zheng-ming-ww1zv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、lc189

1.引入额外数组

引入额外数组,备份nums数组,再把nums2中(i+k)%n的位置的元素移回nums数组中i的位置把数组看成环形的,右移k,相当于下标+k,由于数组长度为n,i+k大于n时越界了,需要对i+k取模,放在nums数组前面

java 复制代码
class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        int[] nums2 = new int[n];
        int tmp;
        int nex;
        for(int i = 0;i<n;i++){
            nums2[i]=nums[i];
        }
        for(int i=0;i<n;i++){
            nex=(i+k)%n;
            nums[nex]=nums2[i];
        }
    }
}

2.原地翻转

java 复制代码
class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n; // 轮转 k 次等于轮转 k % n 次
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 1);
    }

    private void reverse(int[] nums, int i, int j) {
        while (i < j) {
            int temp = nums[i];
            nums[i++] = nums[j];
            nums[j--] = temp;
        }
    }
}

作者:灵茶山艾府
链接:https://leetcode.cn/problems/rotate-array/solutions/2784427/tu-jie-yuan-di-zuo-fa-yi-tu-miao-dong-py-ryfv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
无限码力1 分钟前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
AI人工智能+电脑小能手15 分钟前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
BlockWay1 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft
风筝在晴天搁浅1 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
Smoothcloud润云1 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text
计算机安禾1 小时前
【算法分析与设计】第41篇:确定性与非确定性多项式时间:P与NP的形式化
算法
浮午2 小时前
字节AI Agent开发面试全解析:15道高频问题+深度答案
人工智能·面试·职场和发展
JustHappy2 小时前
古法编程秘籍(四):函数究竟是什么?把函数最重要的能力一次讲清楚
前端·后端·面试
Byron__2 小时前
RabbitMQ 面试核心精讲
java·面试·rabbitmq
卷帘依旧2 小时前
setState是同步的还是异步的
前端·面试