连续子数组的最大和
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
示例1
输入:[1,-2,3,10,-4,7,2,-5]
返回值:18
说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int max=array[0];
int res=array[0];
for(int i=1;i<array.length;i++)
{
max=Math.max(max+array[i],array[i]);
res=Math.max(max,res);
}
return res;
}
}1-n整数中1出现的次数
求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
示例1
输入:13
返回值:6
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
StringBuffer s=new StringBuffer();
for(int i=1;i<=n;i++)
{
s.append(i);
}
String str=s.toString();
int c=0;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='1')
{
c++;
}
}
return c;
}
}把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
示例1
输入:[3,32,321]
返回值:"321323"
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String s="";
for(int i=0;i<numbers.length;i++)
{
for(int j=i+1;j<numbers.length;j++)
{
int a=Integer.valueOf(numbers[i]+""+numbers[j]);
int b=Integer.valueOf(numbers[j]+""+numbers[i]);
if(b<a)
{
int t;
t=numbers[i];
numbers[i]=numbers[j];
numbers[j]=t;
}
}
}
for(int i=0;i<numbers.length;i++)
{
s+=numbers[i];
}
return s;
}
}丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
示例1
输入:7
返回值:8
import java.util.ArrayList;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index==0)
return 0;
ArrayList<Integer> a=new ArrayList<>();
a.add(1);
int i2=0,i3=0,i5=0;
while(a.size()<index)
{
int n2=2*a.get(i2);
int n3=3*a.get(i3);
int n5=5*a.get(i5);
int min=Math.min(Math.min(n2,n3),n5);
if(min==n2)
i2++;
if(min==n3)
i3++;
if(min==n5)
i5++;
a.add(min);
}
return a.get(index-1);
}
}两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
//辅助栈
import java.util.Stack;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead2==null||pHead1==null)
return null;
Stack<ListNode> s1=new Stack<>();
Stack<ListNode> s2=new Stack<>();
while(pHead1!=null)
{
s1.add(pHead1);
pHead1=pHead1.next;
}
while(pHead2!=null)
{
s2.add(pHead2);
pHead2=pHead2.next;
}
ListNode l=null;
while(!s1.isEmpty()&&!s2.isEmpty()&&s1.peek()==s2.peek())
{
l=s1.pop();
s2.pop();
}
return l;
}
}
//长度遍历
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead2==null||pHead1==null)
return null;
ListNode p1=pHead1;
ListNode p2=pHead2;
while(p2!=p1)
{
p2=p2.next;
p1=p1.next;
if(p1!=p2)
{
if(p1==null)
p1=pHead2;
if(p2==null)
p2=pHead1;
}
}
return p2;
}
}

京公网安备 11010502036488号