美文网首页
leetcode 算法第一集

leetcode 算法第一集

作者: xq9527 | 来源:发表于2022-06-20 17:05 被阅读0次

    前言:

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

    需求

    给你一个整数数组 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集合

    • HashSet 就是一个 HashMap。HashMap的key存放值,value存放Object对象
    • HashSet 特点是不重复,也正是利用了HashMap的数据结构的特点,它key是不会重复的。如果不理解先看上面的HashMap知识

    所以我们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,小弟在这里

    相关文章

      网友评论

          本文标题:leetcode 算法第一集

          本文链接:https://www.haomeiwen.com/subject/lwyjvrtx.html