题目

image.pngimage.png

解题代码

  1. class Solution {
  2. public int maxDistance(int[] colors) {
  3. Map<Integer,int[]> map = new HashMap<>(2);
  4. List<int[]> l = new ArrayList<>();
  5. for(int i = 0; i < colors.length; i++) {
  6. int [] ints = new int[2];
  7. if(map.containsKey(colors[i])) {
  8. map.get(colors[i])[1] = i; //更新最大值
  9. } else {
  10. map.put(colors[i],new int[]{i,i});
  11. }
  12. }
  13. for (Integer key : map.keySet()) {
  14. l.add(map.get(key));
  15. }
  16. int max = 0;
  17. for(int i = 0; i < l.size(); i++ ) {
  18. for(int j = i + 1; j < l.size(); j++ ) {
  19. max = Math.max(Math.abs(l.get(i)[1] - l.get(j)[0] ),max );
  20. max = Math.max(Math.abs(l.get(j)[1] - l.get(i)[0] ),max );
  21. }
  22. }
  23. return max;
  24. }
  25. }
  1. class Solution {
  2. public int maxDistance(int[] colors) {
  3. int length = colors.length;
  4. int max = 0; //记录最大值
  5. for(int i = 0; i < length; i++) {
  6. for(int j = i + 1; j < length; j++) {
  7. if(colors[i] != colors[j]) {
  8. max = Math.max(max,j - i);
  9. }
  10. }
  11. }
  12. return max;
  13. }
  14. }
  1. class Solution {
  2. public int maxDistance(int[] cs) {
  3. int len = cs.length; //记录长度
  4. /**
  5. 因为要最大,所以有三种情况:
  6. 首尾不相同直接返回,否则说明首尾是相同的颜色
  7. “0~右往左第一个不相同”这一段
  8. “左往右第一个不相同~length-1”这一段
  9. 然后比较这两个谁大就行
  10. */
  11. //此处采用贪心
  12. if(cs[0] != cs[len - 1]) return len - 1;
  13. int left = 1;
  14. while( cs[0] == cs[left]) left++; //更新左边界
  15. int right = len - 2;
  16. while(cs[len - 1] == cs[right] ) right--; //更新右边界
  17. return Math.max(right,len - 1 - left);
  18. }
  19. }