一种自己解题,一种高赞解题 
/**
* 移除数组中目标元素,返回新数组长度
* @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数组移除数组中目标元素等题目的更多相关文章

  1. 巧妙利用ToArray()函数移除集合中的元素

    当我们对集合foreach遍历时,不能直接移除遍历的集合的元素,解决的方法有很多种,见我之前的随笔: http://www.cnblogs.com/527289276qq/p/4331000.html ...

  2. 三种移除list中的元素(可靠)

    /** * 直接使用foreach方法移除list中的元素会抛异常 * Exception in thread "main" java.util.ConcurrentModific ...

  3. js数组,在遍历中删除元素

    /** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.splice(i, 1); // ...

  4. js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )

    /** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.splice(i, 1); // ...

  5. 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 ...

  6. js移除Array中指定元素

    首先需要找到元素的下标: var array = [2, 5, 9]; var index = array.indexOf(5); 使用splice函数进行移除: if (index > -1) ...

  7. c#List移除列表中的元素

    对于一个List<T>对象来说移除其中的元素是常用的功能.自己总结了一下,列出自己所知的几种方法. class Program { static void Main(string[] ar ...

  8. [google面试CTCI] 2-1.移除链表中重复元素

    [链表] Q:Write code to remove duplicates from an unsorted linked list      FOLLOW UP      How would yo ...

  9. 移除list中null元素

    查询结果为null, list.size()却是1 移除该null元素 totalList.removeAll(Collections.singleton(null));

随机推荐

  1. K 均值算法-如何让数据自动分组

    公号:码农充电站pro 主页:https://codeshellme.github.io 之前介绍到的一些机器学习算法都是监督学习算法.所谓监督学习,就是既有特征数据,又有目标数据. 而本篇文章要介绍 ...

  2. drf的权限扩充

    drf框架为我们提供了基本的权限验证.主要包括三种验证 1.AllowAny 所有用户 2.IsAuthenticated 验证过的用户 3.IsAdminUser 超级管理员 这些权限人员不一定满足 ...

  3. ubantu+nginx+uwsgi+django部署

    1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp ...

  4. 第6章 Python中的动态可执行方法 第6.1节 Python代码编译

    在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联. 一.    Python解释器的功能 Python虽然是解释型语言,但Python代码也是可编译 ...

  5. Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  6. 为什么Python中称__lt__、__gt__等为“富比较”方法

    Python中基类object提供了一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较,包括__lt__.__gt__.__le__.__ge__._ ...

  7. Java基础学习之流程控制语句(5)

    目录 1.顺序结构 2.选择结构 2.1.if else结构 2.2.switch case结构 3.循环结构 3.1.while结构 3.2.do while结构 3.3.for结构 3.3.1.普 ...

  8. WordCounter项目(基于javase)

    1.  Github项目地址: https://github.com/Flyingwater101/WordCount 1.  PSP表格 PSP2.1 Personal Software Proce ...

  9. vue优点

    低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View ...

  10. eclipse/myeclipse 使用技巧

    一.变量名自动补全 原理是:在输入变量名后,去掉按下空格或=后,代码上屏 以前只知道alt+/调出assist,后来发现可以所有字母都激活content assist(8.1里有写).用起来果然很爽, ...