和为s的两个数
要求数组要排序
public class Main{
class Point{
int x;
int y;
Point(int x1,int y1){
x=x1;
y=y1;
}
void print(){
System.out.println(x+" "+y);
}
}
public Point twoNumberSum(int []a,int sum){
int i=0;
int j= a.length-1;
while(i<j){
if((a[i]+a[j])==sum){
System.out.println(a[i]+" "+a[j]);
return new Point(a[i],a[j]);
}else if((a[i]+a[j])>sum){
j--;
}else{
i++;
}
}
return null;
}
public static void main(String... arg) {
Main main = new Main();
main.twoNumberSum(new int[]{1,2,5,7,9}, 7);
}
}
和为s的连续的正整数
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
import java.util.ArrayList;
public class Solution {
ArrayList<ArrayList<Integer> > list = new ArrayList<ArrayList<Integer>>();
public void numberSeqSum(int sum){
if(sum==0) System.out.println("no");
int small = 1;
int big = 2;
int mid = (sum+1)/2;//至少两个数
int total = small+big;
while(small<mid&&small<big){
if(total==sum){
ArrayList<Integer> l = new ArrayList<Integer>();
for(int i=small;i<=big;i++){
l.add(i);
}
list.add(l);
//System.out.println(small+" "+big);
big++;
total = total+big;
}else if(total < sum){
big++;
total = total + big;
}else{
total = total - small;
small++;
}
}
}
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
if(sum==1||sum==2) return list;
numberSeqSum(sum);
return list;
}
}
删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
ListNode p = new ListNode(123);
p.next=pHead;
ListNode head = pHead;
ListNode last = p;
while(head!=null){
if(head.next!=null&&head.val!=head.next.val){
last = head;
head = head.next;
}else if(head.next==null){
break;
}else{
while(head.next!=null&&head.val==head.next.val){
head = head.next;
}
last.next=head.next;
head = head.next ;
}
}
return p.next;
}
}