【LeetCode】two num 利用comparable接口 对对象进行排序

题目two num

题意:给定一个整数数组和一个目标值,要求在数组中找到两个数,使得它们的和相加等于目标值,并且返回两个数的下标

思路:1.如果使用暴力,时间复杂度为O(n^2)

2.可以先将所有数进行排序,从最大值和最小值开始匹配再根据和目标值的比较移动,知道找到结果,时间复杂度为O(nlog(n))

知识点:comparable 接口的使用,利用其进行对象的自然排序,相关文章

public class Solution {
        static class Node implements Comparable<Node>{
        	int val,index;
        	public Node(int v,int i){
        		val = v;
        		index = i;
        	}
        	public int compareTo(Node o){
        		return this.val - o.val;
        	}
        }
        public int[] twoSum(int[] numbers,int target){
        	int[] xy = new int[2];
        	Node[] nodes = new Node[numbers.length];
        	for(int i = 0;i < numbers.length;i++){
        		nodes[i] = new Node(numbers[i],i+1);
        	}
        	Arrays.sort(nodes);
        	int i = 0,j = numbers.length-1;
        	while(i < j){
        		if(nodes[i].val+nodes[j].val == target){
        			break;
        		}
        		else if(nodes[i].val+nodes[j].val < target)
        			i++;
        		else
        			j--;
        	}
        	xy[0] = nodes[i].index <= nodes[j].index ? nodes[i].index : nodes[j].index;
        	xy[1] = nodes[i].index > nodes[j].index?nodes[i].index:nodes[j].index;
        	return xy;
        }
    } 
时间: 2024-10-10 13:24:27

【LeetCode】two num 利用comparable接口 对对象进行排序的相关文章

浅析Comparable接口和collection的排序

今天LZ在做Huffman编解码,需要做的模块中有一个就是,对于字符出现的frequency来按从小到大顺序排序,然后等下继续构建frequency的排序序列,我最后选用的方案是自己用linkedlist来模拟HuffmanNode队列,那么一个问题就是怎么按照对象的属性来排序. 1):在网上看了发现可以让HuffmanNode类实现Comparable接口,注意的是其中的compareTo(object that)方法,返回的是整数,0,负数.当对象比that大,返回整数:比that小,返回负

Comparable接口实现集合的排序

1.让需要排序的对象实现Comparable接口,并重写compareTo方法 public class Student implements Comparable<Student> { //泛型为需要排序的对象     private int age; private String name; private int score; public int getAge() { return age; } public void setAge(int age) { this.age = age;

关于comparator接口和comparable接口以及它们各自的方法compare()和compareTo()

在今天做的LeetCode的题中有两道都出现了利用接口实现对象的排序,两题的相关链接: 1.利用comparable接口对对象排序 2.利用comparator接口实现排序 由于之前都没接触过这两个接口,一时不能明白它们的作用,所以在网上查找了很多资料,现在大致弄清楚一些,现在记录下来,有什么欠缺,欢迎大家及时指正 1.Comparable<T>接口 在java API文档中描述此接口是强行将实现它的每一个类的对象进行整体排序-----称为该类的自然排序,实现此接口的对象列表和数组可以用Col

comparator接口与Comparable接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以

comparable接口 和 comparator接口的特点与区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以排

Comparable接口与Comparator接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以

java比较器Comparable接口和Comaprator接口

java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下: class Student implements Comparable<Student>{ private String n

Java--comparator接口与Comparable接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以

SunnyAmy comparator接口与Comparable接口的区别

1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collections.sort( personList ), 是得不到预期的结果的. 这时肯定有人要问, 那为什么可以