初级算法49题 — LeetCode(20181122 - )
Array:
class Solution {
public int singleNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int res = nums[0];
for (int i = 1; i < nums.length; i++) {
res = res ^ nums[i];
} return res;
}
}
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null || nums.length==0){
return 0;
}
int res =1;
for(int i=1;i<nums.length;i++){
if(nums[i]!=nums[i-1]){
nums[res] = nums[i];
res++;
}
}
return res;
}
}
class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length == 0) {
return 0;
}
int res = 0;
for (int i = 0; i < prices.length - 1; i++) {
if (prices[i + 1] - prices[i] > 0) {
res += prices[i + 1] - prices[i];
}
}
return res;
}
}
这题注意处理k>nums.length的情况,直接取余
class Solution {
public void rotate(int[] nums, int k) {
if (nums == null || nums.length == 0) {
return;
}
k = k%nums.length;
rotateSubArray(nums, 0, nums.length - k - 1);
rotateSubArray(nums, nums.length - k, nums.length - 1);
rotateSubArray(nums, 0, nums.length - 1);
} public void rotateSubArray(int[] nums, int start, int end) {
int left = start;
int right = end;
while (left < right) {
swap(nums, left, right);
left++;
right--;
}
} public void swap(int[] nums, int aIndex, int bIndex) {
int temp = nums[aIndex];
nums[aIndex] = nums[bIndex];
nums[bIndex] = temp;
}
}
class Solution {
public boolean containsDuplicate(int[] nums) {
if (nums == null || nums.length == 0) {
return false;
} Arrays.sort(nums);
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == nums[i + 1])
return true;
} return false;
}
}
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1 == null || nums1.length == 0) {
return nums1;
} if (nums2 == null || nums2.length == 0) {
return nums2;
}
List<Integer> list = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums1) {
if (map.get(num) == null) {
map.put(num, 1);
} else {
map.put(num, map.get(num) + 1);
}
} for (int num : nums2) {
Integer exist = map.get(num);
if (exist != null && exist > 0) {
map.put(num, exist - 1);
list.add(num);
}
} int[] res = new int[list.size()];
for (int i = 0; i < res.length; i++) {
res[i] = list.get(i);
}
return res;
}
}
注意当结果为1000...时需重新生成长数组返回,否则WA(eg:99999 -> 00000)
class Solution {
public int[] plusOne(int[] digits) {
if (digits == null || digits.length == 0) {
return digits;
} int carry = digits[digits.length - 1] + 1 >= 10 ? 1 : 0;
digits[digits.length - 1] = carry == 1 ? 0 : digits[digits.length - 1] + 1;
if (carry == 0) {
return digits;
}
for (int i = digits.length - 2; i >= 0; i--) {
if (digits[i] + carry >= 10) {
digits[i] = 0;
} else {
digits[i] = digits[i] + carry;
return digits;
}
} int[] newNumber = new int[digits.length+1];
newNumber[0] = 1;
return newNumber;
}
}
class Solution {
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) {
return;
} int noZeroIndex = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[noZeroIndex] = nums[i];
noZeroIndex++;
}
} for (int j = noZeroIndex; j < nums.length; j++) {
nums[j] = 0;
} return;
}
}
class Solution {
public int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length < 2) {
return null;
} Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer exist = map.get(target - nums[i]);
if (exist != null) {
int[] res = new int[2];
res[0] = i;
res[1] = exist;
return res;
}
map.put(nums[i], i);
} return null;
}
}
Strings
class Solution {
public String reverseString(String s) {
if (s == null || s.length() == 0) {
return s;
}
char[] arrays = s.toCharArray();
int start = 0;
int end = arrays.length - 1;
while (start < end) {
char temp = arrays[start];
arrays[start] = arrays[end];
arrays[end] = temp;
start++;
end--;
} return new String(arrays);
}
}
class Solution {
public int reverse(int x) {
String s = x + "";
if (s.length() <= 1) {
return x;
}
char[] arrays = s.toCharArray();
int len = arrays.length;
int start = 0;
int end = s.length() - 1;
while (start < arrays.length && arrays[start] > '9' || arrays[start] < '0') {
start++;
}
while (end >= 0 && arrays[end] == '0') {
arrays[end] = ' ';
end--;
}
while (start < end) {
char temp = arrays[start];
arrays[start] = arrays[end];
arrays[end] = temp;
start++;
end--;
} s = new String(arrays);
Long res = Long.valueOf(s.trim());
if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) {
return 0;
}
return res.intValue();
}
}
class Solution {
public int firstUniqChar(String s) {
if (s == null || s.length() == 0) {
return -1;
} char[] array = s.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < array.length; i++) {
Integer exist = map.get(array[i]);
if (exist == null) {
map.put(array[i], 1);
} else {
map.put(array[i], exist + 1);
}
} for (int i = 0; i < array.length; i++) {
if (map.get(array[i]) == 1) {
return i;
}
}
return -1;
}
}
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
s = s.trim();
int start = 0;
int end = s.length() - 1;
while (start < end) {
while (start < s.length() && !Character.isLetter(s.charAt(start)) && !Character.isDigit(s.charAt(start))) {
start++;
} while (end >= 0 && !Character.isLetter(s.charAt(end)) && !Character.isDigit(s.charAt(end))) {
end--;
}
if (start >= end) {
break;
}
if (Character.toLowerCase(s.charAt(start)) != Character.toLowerCase(s.charAt(end))) {
return false;
}
start++;
end--;
} return true;
}
}
初级算法49题 — LeetCode(20181122 - )的更多相关文章
- LeetCode初级算法的Python实现--链表
LeetCode初级算法的Python实现--链表 之前没有接触过Python编写的链表,所以这里记录一下思路.这里前面的代码是和leetcode中的一样,因为做题需要调用,所以下面会给出. 首先定义 ...
- 【LeetCode算法】LeetCode初级算法——字符串
在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...
- LeetCode探索初级算法 - 动态规划
LeetCode探索初级算法 - 动态规划 今天在LeetCode上做了几个简单的动态规划的题目,也算是对动态规划有个基本的了解了.现在对动态规划这个算法做一个简单的总结. 什么是动态规划 动态规划英 ...
- LeetCode初级算法--数组01:只出现一次的数字
LeetCode初级算法--数组01:只出现一次的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- LeetCode初级算法--数组02:旋转数组
LeetCode初级算法--数组02:旋转数组 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ ...
- LeetCode初级算法--字符串01:反转字符串
LeetCode初级算法--字符串01:反转字符串 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- LeetCode初级算法--链表01:反转链表
LeetCode初级算法--链表01:反转链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ ...
- LeetCode初级算法--链表02:合并两个有序链表
LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- LeetCode初级算法--树01:二叉树的最大深度
LeetCode初级算法--树01:二叉树的最大深度 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
随机推荐
- js运算浮点数
在js中做小数:9.3+0.3会发现,得到的结果并不是9.6,而是9.600000000000001.这是为什么? Javascript采用了IEEE-745浮点数表示法,这是一种二进制表示法,可以精 ...
- redhad系统配置daocloud加速器
一.注册daocloud账户网址:http://www.daocloud.io/ 配置加速器需要在daocloud上注册一个用户.注册之后,登陆进去可以看到[加速器]选项. 点击加速器选项之后,就可以 ...
- AngularJs(v1)相关知识和经验的碎片化记录
1.利用angular指令监听ng-repeat渲染完成后执行脚本 http://www.cnblogs.com/wangmeijian/p/5141266.html 2.$http的POST请求中请 ...
- static在C和C++里各代表什么含义
转自:http://blog.csdn.net/wanglongfei_hust/article/details/10011503 static关键字有三种使用方式,其中前两种只指在C语言中使用,第三 ...
- 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法
建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...
- 常用的String方法Math方法
Arrays.sort();冒泡排序字符串.charAt(i);字符串索引i上的字符Integer.prsent(字符串) 字符串转整数equals(Object anObject) 将此字符串与指定 ...
- 策略和计费控制(PCC)系统研究
策略和计费控制(PCC)系统研究 研究内容 [TOC "float:left"] 策略与计费控制(PCC)框架1 [架构图](achitecture.png "Archi ...
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- MVC4 Filter (筛选器)
Filter,在MVC中我们通常将Filter定义成Attribute特性 来供Controller 或者Action 方法调用. FilterAttribute 是所有Filter 的基类. 而 F ...
- day 21 01 序列化模块和模块的导入的复习以及包的初识
day 21 01 序列化和模块的导入的复习以及包的初识 1.序列化模块 什么是序列化模块:数据类型转化成字符串的过程就是序列卷 为什么要使用序列化模块:为了方便存储和网络传输 三种序列化模块: (1 ...