zoukankan      html  css  js  c++  java
  • 初级算法题记录(一)

    题一:

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    思路:不同两数异或为1,相同两数异或为1
    代码:
    public int singleNumber(int[] nums) { int x = 0; for(int i = 0; i<nums.length;){ x = x ^ nums[i]; i++; } return x; }

    题二:存在重复元素

    给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
    思路1:先将数组排序,再判断有序数组相邻俩数是否相同
    代码:
    public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); for(int i=0; i<nums.length; ){ if(nums[i]==nums[i+1] ){ return true; } else{ i++; } } return false; }

    思路2:尝试使用哈希表
    代码:
    public boolean containsDuplicate0(int[] nums) { Set<Integer> s = new HashSet<Integer>(); for(int x: nums) { if( !s.add(x)) { return true; } } return false; }
    题三:加一

    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
    思路:数字为9就需要继续循环;首位为9时要扩充数组空间。
    代码:

    点击查看代码
     public int[] plusOne(int[] digits) {
            for(int i = digits.length-1; i>=0;i--){
                if(digits[i]<=8){
                    digits[i]+=1;
                    return digits;
                }
                else if(i!=0){
                    digits[i] = 0;                
                }
                if(i==0 && digits[i]==9){
                    int[] newDigits = new int[digits.length+1];
                    newDigits[0] = 1;
                    newDigits[1] = 0;
                    for(int k =2; k <= digits.length;){
                        newDigits[k] = digits[k-1];
                        k++;
                    }
                    return newDigits;
                }
            }    
            return digits;        
        }
    

    题四:删除数组中重复项

    给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

    点击查看代码
    public int removeDuplicates(int[] nums) {
            if(nums.length==0){
                return 0;
            }
            if(nums.length==1){
                return 1;
            }
            int slow,fast;
            for(slow =0,fast=1;fast<=nums.length-1;){
                if(nums[slow]==nums[fast]){
                    fast++;
                }
                else if(nums[slow] != nums[fast]){
                    nums[slow+1] = nums[fast];
                    slow++;
                    
                }
            }
            return slow+1;
        }
    
    

    说明:以上题目均来自力扣习题

  • 相关阅读:
    VSCode settings.json的配置样例
    用css让div高度自动撑满屏幕
    C# 后端接受前端上传的文件
    netcode 控制台项目生成exe文件
    C# UDP发送和接收
    C# 直播录制视频
    Vs2017 FrameWork EF Mysql Mvc 三层整合1
    Vs2017 FrameWork EF Mysql 控制台应用
    Vs2017 NetCode EF Mysql 控制台应用
    Vs2017 NetCode Mvc EF Mysql 整合2
  • 原文地址:https://www.cnblogs.com/cherylwu/p/15655248.html
Copyright © 2011-2022 走看看