初级算法题记录(一)

题一:

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
思路:不同两数异或为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;
    }

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

原文地址:https://www.cnblogs.com/cherylwu/p/15655248.html