ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

LeetCode 算法 只出现一次的数字,两个数组的交集 II,加一,移动零,两数之和

2021-11-24 09:05:34  阅读:136  来源: 互联网

标签:digits 加一 两个 数字 nums int II 数组 两数


文章目录

只出现一次的数字

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

在这里插入图片描述

class Solution {
    public int singleNumber(int[] nums) {
    //     与	&	两个数字相与:当两个数字对应的二进位均为1时,结果位为1,否则为0。参与运算的数以补码出现。
    //     或	|	两个数字相或:当两个数字对应的二进位有一个为1时,结果位为1,否则为0。参与运算的数以补码出现。	
    // 异或  ^  两个数字相异或:当两个数字对应的二进位相异时,结果位为1,否则为0。参与运算的数以补码出现。
        // 三个不同数(异或后)   两个相互异或必得第三个数 
    if(nums == null || nums.length == 0){
        return 0;
    }
    int a = 0;
    for(int i : nums){
        a = a^i;
    }
    return a;
    }
}

两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {

    //     /*
    //         首先对两个数组进行排序,然后使用两个指针遍历两个数组。
    //         初始时,两个指针分别指向两个数组的头部。
    //         每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,
    //         如果两个数字相等,将该数字添加到答案,并将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。*/
    //     //第一个数组的第i个元素小于第二个数组的第j个元素
  
    Arrays.sort(nums1);
    Arrays.sort(nums2);
    List<Integer> as = new ArrayList<>();
    for(int i = 0,j = 0;i<nums1.length && j < nums2.length;){
        if(nums1[i] > nums2[j]){
            j++;
        }else if(nums1[i] < nums2[j]){
            i++;
        }else{
            as.add(nums2[j]);
            i++;
            j++;
        }

    }
    int[] an= new int[as.size()];
    for(int k = 0;k<as.size();k++){
        an[k] = as.get(k);
    }
    return an;

    }

}

加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

在这里插入图片描述

class Solution {
    public int[] plusOne(int[] digits) {
        
        digits[digits.length-1] = digits[digits.length-1]+1;

        for(int i = digits.length-1;i > 0;){
            if(digits[i] == 10){
                digits[i-1] = digits[i-1] + 1;
                digits[i] = 0;
            }else{
                i--;
            }
        }
        if(digits[0] == 10){
            int[] digits2 = Arrays.copyOf(digits,digits.length+1); 
            digits2[0] = 1;
            for(int i = 1;i<digits.length;i++){
                digits2[i] = digits[i-1];
            }
            digits2[1] = 0;
        return digits2;
        }else {
        return digits;
        }
    }
}

移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

class Solution {
    public void moveZeroes(int[] nums) {
        for(int j = 0;j<nums.length;j++){
            for(int i = 0;i<nums.length-1;i++){
            if(nums[i] == 0){
                int temp = nums[i];
                nums[i] = nums[i+1];
                nums[i+1] = temp;
            }
        }
        }
    }
}

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

在这里插入图片描述

class Solution {
    public int[] twoSum(int[] nums, int target) {
       int i=1,j = 0;
       while(nums[i] + nums[j] != target){
           if(i == nums.length-1){
               j++;
               i = j;
           }
           i++;
           
           
       }
       return new int[]{j,i};
    }
}

标签:digits,加一,两个,数字,nums,int,II,数组,两数
来源: https://blog.csdn.net/wang121213145/article/details/121454607

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有