leetcode 算法第一集

2022-06-20  本文已影响0人  xq9527

前言:

各位同学大家好,现在这段时间给大家更新算法的一些讲解 废话不多说我们正式开始,希望能帮助到各位的学习 工作以及面试

需求

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例

输入:nums = [1,2,3,1]
输出:true

具体实现

第一种 排序
在对数字从小到大排序之后,数组的重复元素一定出现在相邻位置中。因此,我们可以扫描已排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。

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

复杂度分析
时间复杂度:O(N\log N)O(NlogN),其中 NN 为数组的长度。需要对数组进行排序。
空间复杂度:O(\log N)O(logN),其中 NN 为数组的长度。注意我们在这里应当考虑递归调用栈的深度。
我们通过 for循环 数组里面的相邻的2个元素进行数值对比 如果相等我们返回true 否则就返回false

测试一把

image.png

方法二

对于数组中每个元素,我们将它插入到哈希表中。如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素。

    public static boolean containsDuplicate2(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int x : nums) {
            if (!set.add(x)) {
                return true;
            }
        }
        return false;
    }

第二种我们用这个HashSet集合

所以我们for循环便利的时候将原来数组里面每一个元素添加到我们set里面如果出现重复的元素就会返回false
测试效果 :

image.png
##  完整代码 
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;


/***
 *
 * 创建人:xuqing
 * 创建时间:2022年6月20日16:47:01
 * 类说明:测试类
 *
 *
 */
public class onenums {

    public static void main(String[] args) {
        int[] numbers={1,2,3,1};
        Boolean  flag=containsDuplicate(numbers);
        Boolean flag2=containsDuplicate2(numbers);
        System.out.println("方法1");
        System.out.println(flag);
        System.out.println("方法2");
        System.out.println(flag2);
    }
    public  static   boolean containsDuplicate(int[]nums){
        Arrays.sort(nums);
        int n = nums.length;
        for (int i = 0; i < n - 1; i++) {
            if (nums[i] == nums[i + 1]) {
                return true;
            }
        }
        return false;
    }
    public static boolean containsDuplicate2(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int x : nums) {
            if (!set.add(x)) {
                return true;
            }
        }
        return false;
    }
}

最后总结

以后会长期更新算法文章讲解的,主要是希望能帮助到各位网友的基础学习和面试的 最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。各位同学如果觉得文章还不错 ,麻烦给关注和star,小弟在这里

上一篇下一篇

猜你喜欢

热点阅读