Leetcode数组题*3
Leetcode数组题*3
66.加一
题目描述
- 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
- 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
- 你可以假设除了整数 0 之外,这个整数不会以零开头。
示例:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
链接:https://leetcode-cn.com/problems/plus-one
思路分析
参考题解大神的巧妙解法:Java数学解题
一个数用数组存储,那么加上1之后只有两种情况
- 最后一位不是9,直接让数组的最后一位加1后返回该数组。
- 最后一位是9的情况,需要在循环中判断,因为它的前面一位也可能是9,首先让9变为0,然后前一位加1。
- 如果最高位为9,可以创建一个新的数组,长度比原数组长度大一,首位置0。
/**
* 将一个用表示数字的数组传入,加上1之后,返回新数组
* @param digits 传入的数组
* @return 返回加一之后的新数组
*/
public static int[] plusOne(int[] digits){
int len = digits.length;
for(int i = len-1;i>=0;i--){
digits[i]++;
digits[i] = digits[i]%10;
//末位不是9,直接返回
if(digits[i]!=0) return digits;
}
//最高位为9的情况,创建一个比原数组长1的数组
int[] newDigits = new int[len+1];
//首位置1,其余初始化为0
newDigits[0] = 1;
return newDigits;
}
88.合并两个有序数组
题目描述
- 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 =[1,2,3,0,0,0],m =3
nums2 =[2,5,6],n =3
输出: [1,2,2,3,5,6]
链接:https://leetcode-cn.com/problems/merge-sorted-array
思路分析
参考题解:画解算法
- 由于nums1有足够的空间撑下两个数组,可以从后向前处理排序加合并。
- 设置指向两个数组数字尾部的指针p1和p2,和一个指向刚好是合并数组的最后一位的指针p。
- 从后向前比较两个数组中的值,将大的放入nums1的后面,依次向前填充。
- 当nums1中没有数的时候,将nums2全部拷贝到nums1的前面。
/**
* 合并并排序到第一个数组
*
* @param nums1 传入的第一个数组
* @param m 第一个数组的长度
* @param nums2 传入的第二个数组
* @param n 第二个数组的长度
*/
public static void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1;//指向nums1的有数字的最后一位
int p2 = n - 1;//指向nums2的有数字的最后一位
int p = m + n - 1;
//从有数字的最后一位向前,一一对比,两者较大的数存到nums1的p位置,分别向前
while (p1 >= 0 && p2 >= 0) {
nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--];
}
//由于是存到nums1上的,所以保证最后p1无元素可指的时候,把nums2上的元素按顺序拷贝到nums1
System.arraycopy(nums2, 0, nums1, 0, p2 + 1);
}
167.两数之和Ⅱ-输入有序数组
题目描述
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
思路分析
参考题解:双指针求解两数之和
- 注意是已排序数组,可以利用这一点求解。
- 双指针求解,一指针指向前,一指针指向后。
- 如果两个指针对应的和刚好是target,返回两个指针对应索引+1。
- 如果和大于target,就将大数指针向前移动。反之,小数指针向后移动。
/**
* 得到传入数组中两个元素和刚好是目标数字的位置,用数组返回
* @param numbers 传入的目标数组
* @param target 传入的目标数字
* @return 返回两元素和为目标数字的对应位置
*/
public static int[] twoSum(int[] numbers,int target){
int i = 0;
int j = numbers.length-1;
if(numbers == null) return null;
while(i<j){
int sum = numbers[i]+numbers[j];
if(sum==target) return new int[]{i+1,j+1};
else if(sum>target){
j--;
}else{
i++;
}
}
return null;
}
Leetcode数组题*3的更多相关文章
- LeetCode刷题总结-数组篇(上)
数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...
- LeetCode刷题总结-数组篇(中)
本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...
- LeetCode刷题总结-数组篇(下)
本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...
- LeetCode刷题总结-数组篇(番外)
本期共7道题,三道简单题,四道中等题. 此部分题目是作者认为有价值去做的一些题,但是其考察的知识点不在前三篇总结系列里面. 例1解法:采用数组索引位置排序的思想. 例2解法:考察了组合数学的组合公式应 ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
随机推荐
- Play! 1.x Eclipse Debug调试报错解决方法记录
使用Play eclipsify xxxx[项目路径],可以把play new xxxx[项目路径]创建的工程生成为Eclipse的项目 但是在Debug AS 调试的时候,会报以下错误 Error ...
- 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了
部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...
- sublime中写python代码
SublimeREPL插件 这个是首先要安装的,此插件主要功能是为了实现交互,在安装后需要一些简单的配置 在Preferences--> Key Bindings--> user下添加如下 ...
- 如何把已有的本地git仓库,推送到远程新的仓库(github private)并进行远程开发;
最近因为疫情,在家干活,连接不上之前的gitlab 服务器:所以不得把现有的代码迁移到github 的私有仓库来进行开发:下面简要记录迁移的过程: 首先,确保你已经配置好本地访问远程私有仓库的所有权限 ...
- 39.Python模板结构优化-引入模板include标签、模板继承使用详解
在进行模板的构造时,不免有些模板的部分样式会相同,如果每一个模板都是重写代码的话,不仅在做的时候麻烦,而且在后期的维护上,也是相当的麻烦.所以我们可以将模板结构进行优化,优化可以通过:引入模板:模板继 ...
- cf1176D
题意简述:数组a经过一系列操作之后获得数组b,给你数组b,构造出一个满足条件的数组a 操作如下从左到右扫描数组a,如果是一个素数,那么把第这个素数的素数加到数组a中,例如a[1]=2那么加3到数组a当 ...
- tensor数据基操----索引与切片
玩过深度学习图像处理的都知道,对于一张分辨率超大的图片,我们往往不会采取直接压平读入的方式喂入神经网络,而是将它切成一小块一小块的去读,这样的好处就是可以加快读取速度并且减少内存的占用.就拿医学图像处 ...
- github的版本控制master和branch develop
一.git版本控制原理 master(主分支), develop(分支),虽然是主分支和分支,却是平级关系,develop可以理解为开发库,master为生产库. 本地版本:master, devel ...
- 论文阅读笔记(九)【TIFS2020】:True-Color and Grayscale Video Person Re-Identification
Introduction (1)Motivation:在现实场景中,摄像头会因为故障呈现灰白色,或者为了节省视频的存储空间而人工设置为灰白色.灰度图像(grayscale images)由8位存储,而 ...
- [AFO]离开,未尝不是一个新的开始
2019年5月18日 我注册了洛谷,提交了我的第一份AC代码-- A+B Problem 11月16日-17日 在短短6个月的仓促学习后,我从OI零基础走到了CSP-S的考场上 同年11月26日 在与 ...