力扣刷题——只出现一次的数字、存在重复元素

258 阅读1分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

☀️ 前言 ☀️

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

第一遍,不求最优解,但求能过!!!

一、存在重复元素

一、题目描述

给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

示例 1:

输入: [1,2,3,1]
输出: true
示例 2:

输入: [1,2,3,4]
输出: false
示例 3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

作者:力扣 (LeetCode) 链接:leetcode-cn.com/leetbook/re… 来源:力扣(LeetCode)

二、题目解析

先排序,再遍历

使用内置函数将数组以升序排序

然后遍历数组,判断是否有相等的元素

三、代码

1. python

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        nums = sorted(nums)
        for i in range(len(nums)-1):
            if nums[i]==nums[i+1]:
                return True
        return False

2. java

class Solution {
    public boolean containsDuplicate(int[] nums) {
        Arrays.sort(nums);
        for (int i=0;i<nums.length-1;i++){
            if(nums[i]==nums[i+1]){
                return true;
            }
        }
        return false;
    }
}

二、只出现一次的数字

💗 一、题目描述 💗

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

作者:力扣 (LeetCode) 链接:leetcode-cn.com/leetbook/re… 来源:力扣(LeetCode)

💁 二、题目解析 💁

  1. 题目标签是位运算,而且线性时间复杂度和不适用额外空间

    所以使用位运算中的异或运算

    0^x -> x
    x^x -> 0
    

    所以我们只需要定义一个变量,赋值为0

    再让它与数组元素异或运算,遍历到最后就可以了

🏃 三、代码 🏃

☁️ 1️⃣. python ☁️

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        ans = 0
        for i in nums:
            ans^=i
        return ans

⚡️ 2️⃣. java ⚡️

class Solution {
    public int singleNumber(int[] nums) {
        int ans =0;
        for (int num:nums){
            ans^=num;
        }
        return ans;
    }
}

❄️ 3️⃣. C# ❄️

public class Solution {
    public int SingleNumber(int[] nums) {
        int sum=0;
        foreach(int num in nums){
            sum^=num;
        }
        return sum;
    }
}