一种自己解题,一种高赞解题 
/**
* 移除数组中目标元素,返回新数组长度
* @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. limit+orderBy陷阱

    碰到一个奇怪的bug,在排序的时候对一个非唯一的字段做order by, 结果在分页的时候,发现每一页的数据都是乱的,并不是对整个排序之后再去limit的. 当我们用唯一字段去排序的时候,因为在找到满 ...

  2. Kafka源码环境搭建

    github地址:https://github.com/apache/kafka clone下来之后可以看到这样的项目结构: 文件目录说明. 目录 描述 bin Windows 和 Linux 下 K ...

  3. ResHacker 用命令行方式修改 windows PE文件版本号

    由于工作需要在詹金斯(genkins)集成环境打包,打包避免不了需要修改版本号,写入版本号最简单的方式通过修改windows rc文件 这就意味着,每次构建新版本前需要修改一次源文件 这个在用詹金斯集 ...

  4. 如何使用Python 进行数据可视化

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 在进行数据分析的时候,经常需要将数据进行可视化,以方便我们对数据的认识和理解. 0,Matplotl ...

  5. How tomcat works(深入剖析tomcat)servlet容器

    How tomcat works (5)servlet容器阅读笔记 第四章阅读了tomcat默认连接器的实现,当时connector中的使用的容器是自定义的容器,也是非常之简单奥,一个人就干完了所有的 ...

  6. 【服务总线 Azure Service Bus】Service Bus在使用预提取(prefetching)后出现Microsoft.Azure.ServiceBus.MessageLockLostException异常问题

    问题描述 Service Bus接收端的日志中出现大量的MessageLockLostException异常.完整的错误消息为: Microsoft.Azure.ServiceBus.MessageL ...

  7. 冰河教你一次性成功安装K8S集群(基于一主两从模式)

    写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...

  8. 极简Linux下安装极简桌面

    sudo apt install -y xorg lxde-core vnc4server 设置密码:vncpasswd 然后先开启服务,然后再终止服务:(这是为了创建一个默认的配置文件)vncser ...

  9. requests请求高德地图api

    高德地图通过GET方式发送url请求数据.url里需要包含开发者key以及一些请求的具体参数.(详情可见高德官网)高德返回的数据默认为JSON格式,方便处理. 顺带来回忆一下requests模块的一些 ...

  10. Netty源码解析 -- PoolChunk实现原理

    本文主要分享Netty中PoolChunk如何管理内存. 源码分析基于Netty 4.1.52 内存管理算法 首先说明PoolChunk内存组织方式. PoolChunk的内存大小默认是16M,Net ...