蓝桥杯正式算法学习(备赛)第一天

博主分享了期中备考后的算法学习经历,主要探讨了如何在数组中找到重复和唯一数字的问题。通过两种不同的方法解决力扣上的题目,包括排序和映射策略。此外,还介绍了一种利用异或操作寻找只出现一次的数字的算法。这些解题思路和过程被视作宝贵的人生回忆。
摘要由CSDN通过智能技术生成

终于熬过了漫长的期中备考,开始正式备赛!加油哦!就算最后没能成功参赛,但备赛过程终是我人生中最宝贵的回忆,加油!


昨日笔记(字迹可能有点丑,多多包涵)

 

 题解:


昨日复习

就是在数组中寻找到那个多余的数字,并返回

利用每个数字异或清零,变成多出的那个数

力扣小练习:

剑指 Offer 03. 数组中重复的数字 - 力扣(Leetcode)

class Solution {
    public int findRepeatNumber(int[] nums) {
        //这道题与昨天的题不同,昨天是在已知数组中的数据后,
        //找到重复的数字,而这个是不知道有什么数字,
        //所以打算采取暴力题解法
        Arrays.sort(nums);
        int res=0;
        for(int i=0;i<nums.length-1;i++){
            
                if(nums[i]==nums[i+1]){
                    return nums[i] ;
                
            }
        }
        return -1;
    }
}
class Solution {
    public int findRepeatNumber(int[] nums) {
        //第二种解法:映射
        int i=0;
        while(i<nums.length){
            //其实也是用到了排序的思想,利用了题干中所有数字都在0~n-1范围内
            if(nums[i]==i){
                i++;
                continue;
            }
            if(nums[nums[i]]==nums[i]){
                return nums[i];
            }
            //交换临时数
            int temp= nums[i];
            nums[i]=nums[temp];
            nums[temp]=temp;
        }
        return-1;
    }
}

开始今天的算法学习

思想:连续进行异或

同类型题:剑指 Offer II 004. 只出现一次的数字 - 力扣(Leetcode)

class Solution {
    public int singleNumber(int[] nums) {
        /*具体地,考虑答案的第 i 个二进制位(i 从 0 开始编号),
        它可能为 0 或 1。对于数组中非答案的元素,每一个元素都出现了 3 次,
        对应着第 i个二进制位的 3 个 0 或 3 个 1,
        无论是哪一种情况,它们的和都是 3 的倍数(即和为 0 或 3)。*/
       int ans = 0;
        for (int i = 0; i < 32; ++i) {
            int total = 0;
            for (int num: nums) {
                //遍历nums中的数组
                total += ((num >> i) & 1);
                //num>>1,右移运算符,相当于除i
            }
            if (total % 3 != 0) {
                ans |= (1 << i);
            }
        }
        return ans;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值