134. 加油站

  1. /**
  2. * @param {number[]} gas
  3. * @param {number[]} cost
  4. * @return {number}
  5. */
  6. var canCompleteCircuit = function(gas, cost) {
  7. if (gas.length === 1) {
  8. return gas[0] < cost[0] ? -1 : 0;
  9. }
  10. const search = (start) => {
  11. let i = 0 ;
  12. let current = 0;
  13. while (i < gas.length) {
  14. const next = start + i++;
  15. current += gas[next % gas.length];
  16. current -= cost[next % gas.length];
  17. if (current < 0) {
  18. return -1;
  19. }
  20. }
  21. return current;
  22. };
  23. for (let i = 0; i < gas.length; i ++) {
  24. if (gas[i] > cost[i]) {
  25. if (search(i) >= 0) {
  26. return i;
  27. }
  28. }
  29. }
  30. return -1;
  31. };

860. 柠檬水找零

  1. /**
  2. * @param {number[]} bills
  3. * @return {boolean}
  4. */
  5. var lemonadeChange = function(bills) {
  6. let five = 0, ten = 0, twenty = 0;
  7. for (let i = 0; i < bills.length; i++) {
  8. if (bills[i] === 5) {
  9. five += 1;
  10. } else if (bills[i] === 10) {
  11. if (five === 0) {
  12. return false;
  13. }
  14. five -= 1;
  15. ten += 1;
  16. } else if (bills[i] === 20) {
  17. if (ten === 0) {
  18. if (five < 3) {
  19. return false;
  20. }
  21. five -= 3;
  22. } else if (ten > 0) {
  23. if (five < 1) {
  24. return false;
  25. }
  26. ten -= 1;
  27. five -= 1;
  28. twenty += 1;
  29. }
  30. }
  31. }
  32. return true;
  33. };

1605. 给定行和列的和求可行矩阵

  1. /**
  2. * @param {number[]} rowSum
  3. * @param {number[]} colSum
  4. * @return {number[][]}
  5. */
  6. var restoreMatrix = function(rowSum, colSum) {
  7. const r = rowSum.length;
  8. const c = colSum.length;
  9. const m = new Array(r);
  10. for (let i = 0; i < r; i++) {
  11. m[i] = new Array(c).fill(0);
  12. for (let j = 0; j < c; j++) {
  13. m[i][j] = Math.min(rowSum[i], colSum[j]);
  14. rowSum[i] -= m[i][j];
  15. colSum[j] -= m[i][j];
  16. }
  17. }
  18. return m;
  19. };

767. 重构字符串

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. var reorganizeString = function(s) {
  6. if (s.length === 1) {
  7. return s;
  8. }
  9. let counts = {};
  10. for (let i = 0; i < s.length; i++) {
  11. const c = s.charAt(i);
  12. counts[c] = counts[c] || 0;
  13. counts[c] += 1;
  14. }
  15. counts = Object.entries(counts);
  16. counts.sort((a, b) => b[1] - a[1]);
  17. let maxChar = counts.shift();
  18. let ans = [], maxrow = maxChar[1];
  19. if (maxrow > (( 1 + s.length) >> 1)) return '';
  20. for (let i = 0; i < maxrow; i++) {
  21. ans[i] = [maxChar[0]];
  22. }
  23. let row = 0;
  24. while(counts.length) {
  25. let [c, max] = counts.shift();
  26. for (let j = 0; j < max; j++, row++) {
  27. ans[row % maxrow].push(c);
  28. }
  29. }
  30. // console.log(ans);
  31. const r = ans.map(item => item.join('')).join('');
  32. return r;
  33. };