【LeetCode】第5天 - 283. 移动零 | 167. 两数之和 II - 输入有序数组

简介: 【LeetCode】第5天 - 283. 移动零 | 167. 两数之和 II - 输入有序数组

题目描述

题目1(283. 移动零)

在这里插入图片描述

题目2(167. 两数之和 II - 输入有序数组)

在这里插入图片描述

解题思路

题目1(283. 移动零)

  • 使用一个游标index记录当前非0元素的个数;
  • 遍历数组,若nums[i]不为0,则将其移动至index处,再++index;
  • 遍历结束后,将nums[index ~ nums.length - 1]全部设为0,即可。

题目2(167. 两数之和 II - 输入有序数组)

  • 定义两个整型指针left = 0,right = numbers.length - 1,分别指向数组的头和尾;
  • 比较numbers[left] + numbers[right]和目标值target的大小。
    (1)若numbers[left] + numbers[right] == target,记录left,right的值,并返回{left+1,right+1};
    (2)若numbers[left] + numbers[right] < target,left指针右移,right指针不动;
    (3)若numbers[left] + numbers[right] > target,left指针不动,right指针左移;

代码实现

题目1(283. 移动零)

class Solution {
    public void moveZeroes(int[] nums) {
        int index = 0;
        for(int i=0;i<nums.length;i++){
            if(nums[i] != 0){
                nums[index] = nums[i];
                ++index;
            }
        }
        for(int i = index;i<nums.length;i++){
            nums[i] = 0;
        }
    }
}

题目2(167. 两数之和 II - 输入有序数组)

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int left = 0, right = numbers.length - 1;
        int[] res = new int[2];
        while(left < right){
            if(numbers[left] + numbers[right] == target){
                res[0] = left + 1;
                res[1] = right + 1;
                return res;
            }else if(numbers[left] + numbers[right] < target){
                ++left;
            }else{
                --right;
            }
        }
        return null;
    }
}
目录
相关文章
|
1月前
|
存储 Java API
LeetCode------合并两个有序数组(4)【数组】
这篇文章介绍了LeetCode上的"合并两个有序数组"问题,并提供了三种解法:第一种是使用Java的Arrays.sort()方法直接对合并后的数组进行排序;第二种是使用辅助数组和双指针技术进行合并;第三种则是从后向前的双指针方法,避免了使用额外的辅助数组。
LeetCode------合并两个有序数组(4)【数组】
|
1月前
|
算法
LeetCode第26题删除有序数组中的重复项
这篇文章介绍了LeetCode第26题"删除有序数组中的重复项"的解题方法,通过使用双指针技巧,高效地去除数组中的相邻重复元素。
LeetCode第26题删除有序数组中的重复项
|
1月前
|
算法
LeetCode第80题删除有序数组中的重复项 II
文章介绍了LeetCode第80题"删除有序数组中的重复项 II"的解法,利用双指针技术在O(1)空间复杂度内原地删除重复元素,并总结了双指针技术在处理有序数组问题中的应用。
LeetCode第80题删除有序数组中的重复项 II
|
1月前
|
算法
LeetCode第88题合并两个有序数组
文章分享了LeetCode第88题"合并两个有序数组"的解法,通过从后向前的合并策略避免了数组元素的前移,使用三个指针高效地完成了合并过程。
|
1月前
|
存储 索引
LeetCode------两数之和(3)【数组】
这篇文章介绍了LeetCode上的"两数之和"问题,提供了两种解法:一种是暴力求解法,通过双层循环遍历数组元素对查找两数之和为目标值的索引,时间复杂度为O(n^2);另一种是使用HashMap优化,通过存储元素值和索引,时间复杂度降低到O(n)。
LeetCode------两数之和(3)【数组】
|
1月前
|
Python
【Leetcode刷题Python】108. 将有序数组转换为二叉搜索树
LeetCode上108号问题"将有序数组转换为二叉搜索树"的Python实现,通过递归选取数组中间值作为根节点,构建高度平衡的二叉搜索树。
21 2
|
1月前
|
算法
LeetCode第1题两数之和
该文章介绍了 LeetCode 第 1 题两数之和的解法,通过使用 HashMap 来记录数组元素及其下标,以 O(n)的时间复杂度解决问题。
|
1月前
|
JavaScript 前端开发 PHP
leetcode——两数之和【一】
leetcode——两数之和【一】
21 0
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
43 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
19 0