LeetCode数组移除数组中目标元素等题目
一种自己解题,一种高赞解题
/**
* 移除数组中目标元素,返回新数组长度
* @param nums
* @param val
* @return
*/
public int removeElement(int[] nums, int val) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
if(nums[i] != val) {
nums[result++] = nums[i];
}
}
return result;
}
public int removeElement2(int[] nums, int val) {
int result = 0;
int length = nums.length;
while(result <length) {
if(nums[result] == val){
nums[result] = nums[length-1];
length--;
continue;
}
result ++;
}
return result;
}
/**
* 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
* @param nums
* @param target
* @return
*/
public int searchInsert(int[] nums, int target) {
//return searchInsertByIndex(nums,0,nums.length-1,target);
int n = nums.length;
int left = 0, right = n - 1, ans = n;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
private int searchInsertByIndex(int[] nums, int start,int end, int target) {
int half = (start+end) / 2;
if(target <= nums[start]){
return start;
}
if(target == nums[end]){
return end;
}
if(target > nums[end]){
return end+1;
}
if(nums[half]>=target){
if(nums[half-1] <target) {
return half;
}else{
return searchInsertByIndex(nums,0,half-1,target);
}
}else{
if(nums[half+1] >=target) {
return half+1;
}else{
return searchInsertByIndex(nums,half,end,target);
}
}
}
/**
* 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
* @param nums
* @return
*/
public int maxSubArray(int[] nums) {
int pre = 0, maxAns = nums[0];
for (int x : nums) {
pre = Math.max(pre + x, x);
maxAns = Math.max(maxAns, pre);
}
return maxAns;
}
public int maxSubArray2(int[] nums) {
int maxAns = nums[0];
int[] result = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
if (i == 0) {
result[i] = nums[i];
} else {
result[i] = Math.max(result[i - 1] + nums[i], nums[i]);
}
maxAns = Math.max(result[i],maxAns);
}
// for (int x : result) {
// if (x > maxAns) {
// maxAns = x;
// }
// }
return maxAns;
}
/**
* 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
* 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字
* @param digits
* @return
*/
public int[] plusOne(int[] digits) {
int flag = 0;
int sum = 0 ;
for(int i = digits.length-1 ;i>=0 ;i--){
if(i == digits.length -1) {
sum = digits[i] + flag +1;
}else{
sum = digits[i] + flag;
}
flag = (sum)/10;
digits[i] = sum%10;
}
if(flag > 0){
digits = new int[digits.length + 1];
digits[0] = 1;
}
return digits;
}
public int[] plusOne2(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
digits[i]++;
digits[i] = digits[i] % 10;
if (digits[i] != 0) {
return digits;
}
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
LeetCode数组移除数组中目标元素等题目的更多相关文章
- 巧妙利用ToArray()函数移除集合中的元素
当我们对集合foreach遍历时,不能直接移除遍历的集合的元素,解决的方法有很多种,见我之前的随笔: http://www.cnblogs.com/527289276qq/p/4331000.html ...
- 三种移除list中的元素(可靠)
/** * 直接使用foreach方法移除list中的元素会抛异常 * Exception in thread "main" java.util.ConcurrentModific ...
- js数组,在遍历中删除元素
/** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.splice(i, 1); // ...
- js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )
/** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.splice(i, 1); // ...
- LeetCode OJ:Remove Nth Node From End of List(倒序移除List中的元素)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- js移除Array中指定元素
首先需要找到元素的下标: var array = [2, 5, 9]; var index = array.indexOf(5); 使用splice函数进行移除: if (index > -1) ...
- c#List移除列表中的元素
对于一个List<T>对象来说移除其中的元素是常用的功能.自己总结了一下,列出自己所知的几种方法. class Program { static void Main(string[] ar ...
- [google面试CTCI] 2-1.移除链表中重复元素
[链表] Q:Write code to remove duplicates from an unsorted linked list FOLLOW UP How would yo ...
- 移除list中null元素
查询结果为null, list.size()却是1 移除该null元素 totalList.removeAll(Collections.singleton(null));
随机推荐
- dubbo协议之请求头编码器
开局一张图,内容全靠XXXXX.... 如图是dubbo协议的格式 encodeRequest进来会先去channel对象中取url的Parameters的"serialization&qu ...
- cobbler 装机服务
一.Cobbler 安装 $ yum install -y epel-release $ yum install -y cobbler cobbler-web pykickstart debmirro ...
- day101:MoFang:模型构造器ModelSchema&注册功能之手机号唯一验证/保存用户注册信息/发送短信验证码
目录 1.模型构造器:ModelSchema 1.SQLAlchemySchema 2.SQLAlchemyAutoSchema 2.注册功能基本实现 1.关于手机号码的唯一性验证 2.保存用户注册信 ...
- Django----短信验证接口
1.注册荣联云账号 1.1注册账号 1.2 登录即可看到开发者账号信息 1.3 添加测试账号 2.使用容联云发送代码测试 '''1. 安装容联云sdk''' pip install ronglian_ ...
- Tree--二叉树BinarySearchTree
BinarySearchTreeMap的实现 1 public interface Map<K extends Comparable<K>, V> { 2 void put(K ...
- C#数据结构-二叉树-顺序存储结构
什么是二叉树:每个树的节点只有两个子树的树形结构. 为什么使用顺序存储结构:使用数组存放满二叉树的各结点非常方便,可以根据一个结点的索引号很容易地推算出它的双亲.孩子.兄弟等结点的编号,从而对这些结点 ...
- PyQt(Python+Qt)学习随笔:QListWidgetItem的构造方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListWidgetItem对象专门用于作为QListWidget对象的一个项. QListWid ...
- PyQt(Python+Qt)学习随笔:QHeaderView的CascadingSectionResizes属性
老猿Python博文目录 老猿Python博客地址 一.CascadingSectionResizes作用 QHeaderView的CascadingSectionResizes属性用于控制当用户调整 ...
- Centos 7 下的java安装
安装java 下载jdk的安装包,放到 /usr/local 目录下 创建一个 java 的目录存放 jdk 1 mkdir java 解压java安装包 1 tar -zxvf "jdk名 ...
- js setTimeout运行机制
在开始之前先看个面试例子 为什么会是0 1 2 2,而不是 0 0 1 1 再来看个例子 输出结果是4个undefined,为何不是1,2,3,4? 这是为什么呢,这是因为setTimeout是异步的 ...