关闭

leetcode题目解答报告(1)

标签: leetcode算法
149人阅读 评论(0) 收藏 举报
分类:

Remove Element

题目:

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

题意:从数组中去除某个值,返回新数组的长度;注意在去除完毕后数组中的元素应该变化了,即出现value的位置都被替换掉了,最后一句的意思是 新长度后面的元素值任意,也就是说,新数组的总长度可以保持不变,但是新长度之前的元素要正确,后面的无所谓。

思路:

设置下标i,j,i表示遍历数组的下标,j表示当前比较的元素下标。初始j=0,从i=0开始遍历数组。如果a[i]==value,不执行任何操作,进行下一次遍历。,直到找到一个a[i]不等于value,这时将将a[i]赋给a[j],然后j自加一。直到遍历结束,此时j的值就是新的数组长度

public class RemoveElement {


	static public int quchu(int[] a,int value){
		int i=0,j=0;
		for(i=0;i<a.length;i++){//遍历数组
		if(a[i]==value)//如果a[i]等于value,跳过继续执行
		continue;
		a[j]=a[i];//如果不相等,赋值给a[j]
		j++;//j表示数组中与value不相等的元素个数
		}
		return j;

		}
		public static void main(String[] args){
		int[] a={1,2,3,3,4,5,3,6,3,7,3};
		int length=0;
		length=quchu(a,3);
		System.out.println(length);
		}


}

Remove Duplicates from Sorted Array

题目:

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,
Given input array A = [1,1,2],

Your function should return length = 2, and A is now [1,2].

题意:
大意是将已排好序的数组中重复点删除,然后返回新数组的长度。数组中前n个数就是新的数组。唯一难点是不能用额外空间。
思路:
设置下标i,j,i表示遍历数组的下标,j表示当前比较的元素下标。初始j=0,从i=1开始遍历数组。如果a[i]==a[j],不执行任何操作,进行下一次遍历。,直到找到一个a[i]不等于a[j],这时将j加一,再将a[i]赋给a[j],把a[j]作为下一次比较的对象。直到遍历结束,此时j+1的值就是新的数组长度
public class RemoveDuplicatesfromSortedArray {
	public static int removeDuplicates(int A[]) {
		if(A.length == 0) {
		return 0;
		}
		int j = 0;
		/*
		 * 去重的数组A[0]不变,
		 * 查看A[1]是不是等于A[0],若等于,则继续查看A[2]是否等于A[0],直到找到一个不相等的A[i]
		 * 因为A[0]已被赋值,所以将A[i]的值赋给A[++j]
		 * 将新找到的数组元素作为比较对象继续遍历数组,直到结束
		 * 最后去重后的数组长度是j+1(A[0]-A[j]共j+1个)
		 * */
		for(int i = 1; i < A.length; i++) {
		if(A[j] != A[i]) {
			j++;//下标加一
		    A[j] = A[i];
		}
		}
		return j + 1;
		}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int length=0;
		int[] a={1,2,3,3,4,5,5,6,6,7,8,8,9};
		length=removeDuplicates(a);
		System.out.println(length);
		

	}

}


Remove Duplicates from Sorted Array II

题目:

Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?

For example,
Given sorted array A = [1,1,1,2,2,3],

Your function should return length = 5, and A is now [1,1,2,2,3].

题意:

每个数只允许重复一次,输出去重后的数字个数,依旧上一题的要求,常数空间也就是只能在原数组上操作。

思路:设置下标i,j,i表示遍历数组的下标,j表示当前比较的元素下标。初始j=0,从i=1开始遍历数组。如果a[i]==a[j],执行num加1操作,。之后判断num是否小于2,如果小于,则j自加1并把a[i]赋值给a[j]。若大于等于2,则不执行任何操作。如果a[i]!=a[j],则j自加1并把a[i]赋值给a[j],同时将num清零,进行下一次遍历,a[j]作为下一次比较的对象。直到遍历结束,此时j+1的值就是新的数组长度。


public class RemoveDuplicatesfromSortedArrayII {
	public static int removeDuplicates(int A[]) {
		if(A.length == 0) {
		return 0;
		}
		int j = 0;
		int num=0;//重复次数
		/*
		 * 去重的数组A[0]不变,
		 * 查看A[1]是不是等于A[0],若等于,num自加1,此时num=1,满足条件。继续查看A[2]是否等于A[0],若等于,则num=2,不满足                  *条件,之后所有重复的元素都被剔除。直到找到一个不相等的A[i]
		 * 因为A[0]已被赋值,所以将A[i]的值赋给A[++j],这时将num清零,用于统计新的元素相等的个数
		 * 将新找到的数组元素作为比较对象继续遍历数组,直到结束
		 * 最后去重后的数组长度是j+1(A[0]-A[j]共j+1个)
		 * */
		for(int i = 1; i < A.length; i++) {
			if(A[j]==A[i]) {
				num++;
				if(num<2) {
					j++;
					A[j]=A[i];
				}
			}
		    else  {
			j++;//下标加一
		    A[j] = A[i];
		    num=0;//清零,用于统计下一个元素的重复数
		}
		}
		return j + 1;
		}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int length=0;
		int[] a={1,2,3,3,3,4,5,5,5,6,6,6,7,8,8,9};
		length=removeDuplicates(a);
		System.out.println(length);
		

	}

}


Plus One

题目:

  Given a non-negative number represented as an array of digits, plus one to the number. 
  The digits are stored such that the most significant digit is at the head of the list. 

题意:

给定一个用数组表示的一个数,对它进行加一操作。 每一个数位都存储在数组的一个位置上。数组下标从大到小表示数位从低位到高位。

思路:

直接求解,设置一个进位标志carry,初值为1,表示加1,从最低位开始tmp = a[x] + carry, a[x] = tmp%10,carry = tmp/10,如果carry不为0对下一位再进行操作,直到所有的数位处理完或者carray为0就退出,如果最后还有carray不为0说明整个数组要扩展一个数位。  

public class PlusOne {
	
	public static int[] mytets(int[] a) {
		int carry=1;//进位值,初始为1,表示加1操作
		int temp;
		int i;
		for(i=a.length-1;i>=0;i--) {
			temp=a[i]+carry;
			carry=temp/10;//向下一位的进位值
			a[i]=temp%10;//当前为的结果值
			if(carry==0) {//无进位则退出
				break;
			}
		}
		if(carry==1) {//分析最后产生的进位,例如999的特殊情况
			int[] result=new int[a.length+1];
			System.arraycopy(a, 0, result, 1, result.length-1);
			result[0]=carry;
			return result;
		}
		else {
			return a;
		}
		
		
	}
	public static void main(String[] args) {
		int []a= {9,9,9,9,9};
		int result[]=mytets(a);
		for (int i = 0; i <result.length; i++) {
			System.out.print(result[i]);
		}
		
	}

}





0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

leetcode全部题目答案

32. Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the length of the ...
  • cslbupt
  • cslbupt
  • 2016-12-03 15:35
  • 4764

leetcode题目解答报告(2)

Pascal's Triangle 题目描述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRo...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017-01-04 22:53
  • 167

leetcode解题思路

转载地址:http://blog.csdn.net/liuxialong/article/details/41941407 收录https://oj.leetcode.com/problems/ 所有题目的解题思路。 Min Stack 题目要求: 设计一...
  • zr459927180
  • zr459927180
  • 2016-07-26 09:37
  • 565

leetcode题目总结<1>

开始了leetcode的刷题之路,话不多说,从头开始,日积月累。 344.Reverse String //my code #include using namespace std; class Solution { public: string reverseString(string...
  • dby3579
  • dby3579
  • 2016-08-11 21:02
  • 775

LeetCode 题目总结/分类

注:此分类仅供大概参考,没有精雕细琢。有不同意见欢迎评论~利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problems/longest-valid-paren...
  • yangliuy
  • yangliuy
  • 2015-03-21 11:29
  • 7385

Leetcode题目解答汇总

Leetcode题目解答汇总   断断续续的在leetcode上刷了一些题,每次遇到一时解决不了的都跳过了,以至于没有完整的熟悉每个题。因此汇总在此,实时更新,方便继续刷题以及后期回顾。 1、001 Two Sum:http://blog.csdn.net/yefengzhichen/...
  • yefengzhichen
  • yefengzhichen
  • 2016-06-18 19:08
  • 275

LeetCode最常见的面试笔试题总结

找了一段时间的实习,总结一下LeetCode上面试出现频率比较高的题,只总结一部分,后续还会继续更新。一、Two Sum题意是给出一个数组,输出和为k的两个数。数组为无序的。 这道题的解题思路是先把数组排序,再用两个指针,分别指向头和尾,并算出头和尾的和s,再把s与k比较,如果s小于k,头指针往后...
  • u014486880
  • u014486880
  • 2016-04-26 23:55
  • 8270

Leetcode题目分类:类型+难易

=== 十月十五日更 === 题已刷完,这篇总结还落下不少进度。这个网站本属于个人博客,以后我不想把刷题这种纯找工作的文章发在这里。另外,我回头审视了以前写的一些题解,发现还有不少提升空间,包括对解法的描述和代码的优化。因此我重新做了一个题解网站,也希望能以更加清晰的分类目录和解法帮助读者提升...
  • u011487593
  • u011487593
  • 2015-04-15 16:16
  • 1306

Python学习(Leetcode 算法题解【1~20】)

掌握了python的基础概念,并不意味着就可以使用python来进行项目开发了。学习一门编程语言时,对于概念的掌握只是基础。用该语言去解决实际问题,并在解决问题的过程中学习才是学一门语言时费时较长的部分。 Leetcode上的算法题目都比较经典,各个难度层次的题目都有,因此可以让各个水平参差的程序员...
  • Hans__Yang
  • Hans__Yang
  • 2016-07-20 21:35
  • 1416

leetcode解题总结(持续更新)

树型:DFS或BFS(不够+状态存储,缩短时间)(如数位DP,就是DFS+状态存储) 链表:多用two pointer 无序数组:hash映射(O(1),map,set等),并查集,字典树tire 有序数组:二分查找 棋牌类游戏博弈树:极大极小值算法,alpha-beta剪枝
  • ChinaJane163
  • ChinaJane163
  • 2016-09-21 20:53
  • 613