LintCode Java Basic, Integer and Array 第一部分
来源:互联网 发布:中山大学就业 知乎 编辑:程序博客网 时间:2024/05/28 16:11
LintCode Java Basic, Integer and Array 第一部分
这次写的是LintCode Java Basic, Integer and Array第一部分的几道算法题分析,也就是第二单元第一部分的题目,都比较简单。这周是fall学期的第二周,machine learning开始又项目了,其他课程也有作业了,会更加忙碌啦。好了,下面开始看这几道题吧!
第一题:在数组中找到第二大的数
注意事项
你可以假定至少有两个数字
样例
给出 [1, 3, 2, 4], 返回 3.
给出 [1, 2], 返回 1.
这道题我的思路是直接用冒泡排序法排好,然后返回下标为length-2的元素即可,当然也可以用其他排序法,毕竟冒泡排序法不是最优解。所谓冒泡排序法就是从数组的第一个元素开始,与其相邻的元素比较大小,如果比相邻的元素大即交换位置。这样第一轮可以找出数组中最大的元素,第二轮可以找出数组中第二大的元素,直至将所有元素按照从小到大排列好。具体代码如下:
public int secondMax(int[] nums) { for(int j = 0;j < nums.length-1;j++){ for (int i = 0;i < nums.length-j-1;i++){ if(nums[i] > nums[i+1]){ int temp = nums[i]; nums[i] = nums[i+1]; nums[i+1] = temp; } } } return nums[nums.length-2];}
第二题:给一个浮点数数组,求数组中的最大值。
样例
给出数组 [1.0, 2.1, -3.3], 返回 2.1.
这道题就是在数组中找到最大的,可以按照上题的思路先排序好,直接返回下标为length-1的元素。这题我的思路是先直接认为第一个元素是最大的,然后让其与其他元素比较,如果其他元素比arr[0]大,就让其取代arr[0],这样通过遍历一遍数组后就可以返回最大值了。代码如下:
public float maxOfArray(float[] A) { // write your code here float max = A[0]; for(int i = 1;i < A.length;i++){ if(A[i] > max){ max = A[i]; } } return max;}
第三题:判断一个正整数是不是回文数。
回文数的定义是,将这个数反转之后,得到的数仍然是同一个数。
注意事项
给的数一定保证是32位正整数,但是反转之后的数就未必了。
样例
11, 121, 1, 12321 这些是回文数。
23, 32, 1232 这些不是回文数。
这道题我的思路是先将输入的数字反转过来,然后和原来的数字进行比较,相同就返回true,不同就返回false。那么重点就是如何将输入的数字反转,过程应该是取出该数字的各个位,然后乘以相应的10的倍数。主要操作符号是%和/。具体代码如下:
public boolean isPalindrome(int num) { // write your code here int onum = num; int newnum = 0; do{ int s = num % 10; newnum = newnum * 10 + s; num = num / 10; }while(num != 0); if(newnum == onum){ return true; }else{ return false; }}
第四题:去除重复元素
给一个整数数组,去除重复的元素。
你应该做这些事
1.在原数组上操作
2.将去除重复之后的元素放在数组的开头
3.返回去除重复元素之后的元素个数
注意事项
不需要保持原数组的顺序
样例
给出 nums = [1,3,1,4,4,2],你需要做以下操作
1.将重复元素扔在最后面 => nums = [1,3,4,2,?,?].
2.返回个数 4
实际上我们并不在意?是什么
这道题应该是这几道题中最难的,首先要去除重复的元素,思路是从数组中的第一个元素开始,和数组中的其他元素比较,如果相等,此时要记录该元素的下标,然后将该元素从数组中取出,该元素之后的元素全部前进一位,再将该元素放置到数组末尾。再从刚刚记录的下标开始判断,要注意的是不是刚刚的下标+1,因为我们将后面的元素全部往前移动了一位。反复该操作,结束的标志应该是length-2的元素和第一个元素相等。之后再用第二个元素同样的逻辑判断,这种思路太复杂,而其复杂的原因主要就是数组无序。所以改进为先排序,之后只用遍历一遍改数组,将不同的元素取代。具体代码如下:
public int deduplication(int[] nums) { // Write your code here if (nums.length == 0) { return 0; } Arrays.sort(nums); int len = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != nums[len]) { nums[++len] = nums[i]; } } return len + 1;}
- LintCode Java Basic, Integer and Array 第一部分
- LintCode天梯(USGiants)-Integer Array
- [Lintcode]Partition Array by Odd and Even
- LintCode on Array by Odd and Even
- LintCode String, Function & Class 第一部分
- Java integer to byte array
- Java基础部分-《第一部分》
- Java 多线程 - 第一部分
- Java第一部分
- 第一部分 走进Java
- Kotlin Reference (三) Basic Types, String, Array and Imports
- 黑马程序员——java基础——path and classpath,int and Integer,Array and Arrays(初学时的疑惑)
- ORACLE SQL and SQL*PLUS 第一部分
- java基础部分总结第一部分
- lintcode 报数(Count and Say) (Java)
- java基础问题(第一部分)
- Java IO体系 - 第一部分
- Java 网络编程 第一部分
- linux下 串口发送流程
- CentOS7下安装Mysql
- php连接数据库
- 隐马尔可夫模型(一)
- Android休眠唤醒1
- LintCode Java Basic, Integer and Array 第一部分
- 【React Native】React基础(二)
- POJ—1797(Heavy Transportation)
- .net分布式压力测试工具(Beetle.DT)
- 【TX1学习与开发系列】(四)如何快速部署多个tx1系统(USB版)
- 为开发者赋能,阿里云大学人才交流市场全新上线!
- MDN JS学习之event
- jmeter解决中文乱码问题
- myeclipse集成JBoss7